"Comprensión profunda de la máquina virtual" Notas de lectura-Reclamación de juicio de memoria

Reclamar juicio de memoria

  • Recuento de referencias (no aplicable)
    • Hay un contador de referencia para el objeto. Cuando un lugar se refiere a él, el contador es +1; si la referencia no es válida, es -1. Cuando el contador es 0, no hay relación de referencia.
    • Implementación simple y alta eficiencia de juicio
    • Existe el tema de las referencias circulares. Hay una referencia mutua entre dos objetos, pero no se puede acceder externamente y se debe reciclar, pero hay una referencia circular que hace que sea imposible reciclar.
  • Algoritmo de análisis de accesibilidad (gc-roots)
    • Raíces De Gc
      • Objetos referenciados por la pila de máquina virtual (tabla de variables locales en el marco de la pila)
      • El objeto de referencia de variable estática en el área de método.
      • Objeto de referencia constante en el área del método
      • Método local stack JNI - objeto de referencia nativo
    • A través del objeto de "Raíces GC" como punto de partida, la ruta del objeto se busca hacia abajo, lo que se denomina la cadena de referencia.
    • Cuando no hay una cadena de referencia entre el objeto y las raíces del GC, el objeto es inalcanzable.
  • Tipo de referencia
    • Referencia fuerte
      • La referencia asociada con el objeto creado por la palabra clave new es una referencia fuerte.
      • Cuando la JVM no tiene suficiente espacio de memoria, la JVM preferiría lanzar un error de tiempo de ejecución OutOfMemoryError (OOM) y no resolvería el problema de la memoria insuficiente reciclando objetos "vivos" con referencias fuertes.
    • Referencia suave
      • Solo cuando la JVM cree que no hay memoria suficiente, intentará recuperar el objeto señalado por la referencia suave: es decir, la JVM se asegurará de que el objeto señalado por la referencia suave se limpie antes de que se arroje OutOfMemoryError.
      • Las referencias suaves se pueden usar junto con una cola de referencia (ReferenceQueue). Si el objeto al que hace referencia la referencia suave es recolectado por el recolector de basura, la máquina virtual agregará la referencia suave a la cola de referencia asociada con él.
      • Escenario de aplicación: las referencias suaves se utilizan generalmente para implementar el almacenamiento en caché sensible a la memoria.
    • Referencia débil (referencia débil)
      • En el proceso del subproceso recolector de basura que escanea el área de memoria bajo su jurisdicción, una vez que se encuentra un objeto con referencias débiles, independientemente de si el espacio de memoria actual es suficiente, recuperará su memoria.
      • Las referencias débiles se pueden usar junto con una cola de referencia (ReferenceQueue). Si el objeto al que hace referencia la referencia débil es basura recolectada, la máquina virtual agregará la referencia débil a la cola de referencia asociada a ella.
      • Escenario de aplicación: las aplicaciones débiles también se pueden usar para cachés sensibles a la memoria.
    • Referencia fantasma (PhantomReference)
      • Si el objeto solo contiene referencias virtuales, entonces, como sin referencias, el recolector de basura puede recopilar cualquier propiedad o función del objeto a la que no se pueda acceder mediante referencias virtuales.
      • Las referencias fantasmas simplemente proporcionan un mecanismo para garantizar que, después de finalizar un objeto, haga algo.
      • La referencia virtual debe usarse junto con la cola de referencia (ReferenceQueue). Cuando el recolector de basura se prepara para reclamar un objeto, si encuentra que tiene una referencia virtual, agregará la referencia virtual a la cola de referencia asociada antes de reclamar la memoria del objeto.
      • Puede saber si el objeto al que se hace referencia será basura recolectada al juzgar si se ha agregado una referencia virtual a la cola de referencia. Si encuentra que la referencia virtual se ha agregado a la cola de referencia, puede tomar alguna medida antes de reciclar el objeto referenciado.
    • Para las referencias suaves y las referencias débiles, la recolección de basura puede tener un segundo problema de confirmación para garantizar que no se haya cambiado a una referencia fuerte.
  • Juzgando la muerte del sujeto
    • 1. Después del análisis de accesibilidad del objeto, si no hay una cadena de referencia con GC Roots, se marca por primera vez y se filtra.
    • 2. Condición de detección: ¿es necesario realizar finalize () en este objeto? Cuando el objeto no cubre finalize () o ha sido ejecutado, se considera que "no es necesario ejecutarlo".
    • 3. Si es necesario ejecutar, el objeto se coloca en la cola F-Queue y se ejecuta mediante el subproceso Finalizador de baja prioridad creado por la máquina virtual.
      • No hay garantía de que finalize () se ejecutará o completará, para evitar que finalize se ejecute lentamente o en un bucle sin fin, lo que provocará un bloqueo en el reciclaje de la memoria.
      • finalize () se ejecuta como máximo una vez durante todo el ciclo de vida. Si el objeto se recicla nuevamente después de ser rescatado por este método, se considera que se ha llamado a este método.
    • 4. El GC marca los objetos en la cola F por segunda vez a pequeña escala. Si un objeto establece una cadena de referencia con GC Roots, se eliminará de la colección "próximamente".
  • Área de método de reciclaje
    • Constante obsoleta
      • Se puede reciclar sin referencias relacionadas.
    • Clase inútil
      • Todas las instancias de esta clase han sido recicladas.
      • El ClassLoader que cargó la clase ha sido reciclado
      • No se hace referencia al objeto de clase correspondiente a esta clase, y no se puede acceder a los métodos de esta clase a través de la reflexión.
    • Satisfacer las condiciones de reciclaje de las clases inútiles solo significa que pueden reciclarse.
Publicado 24 artículos originales · elogiado 0 · visitas 102

Supongo que te gusta

Origin blog.csdn.net/jiangxiayouyu/article/details/105614222
Recomendado
Clasificación