Lo que debes saber sobre la recolección de basura JVM
I. Cuatro tipos de referencia
1.1 Referencia fuerte
1.2 Referencia suave
1.3 Referencia débil
1.4 Referencia fantasma
II. Cómo determinar si un objeto es basura
2.1 Recuento de referencias
2.2 Análisis de accesibilidad de la raíz
III. algoritmo de recopilación
3.1 Marcar-Barrer
3.2 Marcar-Compacto
3.3 Marcar-Copiar
III. > IV.3 Detalles del recolector de basura que prioriza el rendimiento
4.3.1 Parámetros relacionados con JVM
4.3.2 Diagrama de flujo
4.4 Recolector de recolector de basura que prioriza el tiempo de respuesta detalles
4.4.1 Parámetros relacionados con JVM
4.4.2 Diagrama de flujo
4.3.3 Funciones de CMS
5 .Recolector de basura G1
5.1 Parámetros JVM relacionados
5.2 Características
5.3 Recolector de basura de nueva generación G1
5.4 G1 antiguo Un recolector de basura de primera generación p>
Los objetos se pueden reciclar solo si todos los objetos de GC Roots no hacen referencia a ellos a través de referencias fuertes.
Mientras un objeto tenga una relación de referencia, el número de referencias al objeto se incrementará en 1. Si el número de referencias a un objeto es 0, entonces el objeto es basura.
Ventajas: implementación simple, alta eficiencia
Desventajas: si un par de objetos forman una referencia cruzada, pero ningún otro objeto hace referencia a ambos objetos, generalmente este Los objetos Deben ser basura recolectada, pero debido a las referencias cruzadas formadas, no se pueden recolectar.
El objeto raíz del GC comienza a buscar hacia abajo. Los objetos que no se encuentran no serán referenciados, por lo que los objetos no referenciados se identificarán como basura.
Actualmente, los siguientes objetos se pueden utilizar como objetos raíz de GC:
Es fácil entender que durante el proceso de lanzamiento de GC, primero se analiza la accesibilidad raíz de todos los objetos, por lo que marcar todos los objetos de basura; Limpiar todos los objetos después de marcarlos.
Así que, en términos generales, marcar primero y limpiar después.
La desventaja es que el marcado y la limpieza producirán una gran cantidad de fragmentos de memoria discontinuos. Cuando el programa necesita asignar un objeto más grande, demasiados fragmentos harán que la operación de GC no pueda cumplir con los requisitos de asignación. .
El algoritmo de recuperación es básicamente el mismo que el de marcar y borrar, excepto que el segundo paso es un poco diferente: limpia durante el proceso de borrado, que es la mayor diferencia.
Ventajas: No desperdicias mucho espacio.
Desventajas: Los cálculos involucrados en el proceso de intercalación no son triviales.
Este método es completamente diferente de los dos primeros métodos:
Este método divide el área de almacenamiento en partes Desde y Hasta. El área Desde puede contener objetos, y el área Hasta siempre. está vacío y se utiliza para prepararse para la siguiente recepción de datos.
Estas dos áreas tienen dos indicadores:
Ventajas: este algoritmo es muy adecuado para objetos que nacen temprano y mueren más tarde
Desventajas: siempre hay una área en la memoria No utilizada, lo que resulta en espacio desperdiciado.
Características:
Características:
Conmutadores JVM: -XX:+UseSerialGC = Serial + SerialOld
Lo anterior es: basura CMS Colección Diagrama de flujo de trabajo de GC en la era anterior:
Después de analizar el texto anterior, el número de regiones en la nueva generación es el 5% de todas las regiones, este valor es en realidad muy pequeño, por lo que cuando el número; de regiones en la nueva generación no es suficiente, la JVM asignará más regiones a la nueva generación
Cuando el número de regiones en la nueva generación exceda el 60% de todas las regiones, se creará un GC de nueva generación; ejecutado.
Cuando el número de regiones de nueva generación supere el 60% de todas las regiones, se realizará una GC de nueva generación.
La recolección de basura de nueva generación puede causar STW.
El algoritmo de recolección de basura específico es el mismo que el de varios otros recolectores de basura de nueva generación. Todos los recolectores de basura de nueva generación utilizan algoritmos de copia.
El activador de recolección de basura antiguo está relacionado con el parámetro -XX:InitaingHeapOccupancyPercent.
Pero tenga en cuenta que este reciclaje antiguo es en realidad una recolección de basura híbrida que limpia la basura nueva, vieja y enorme al mismo tiempo.
Es lo mismo que el algoritmo de reciclaje de la nueva era. Todavía utiliza el algoritmo de copia, pero el proceso de recolección de basura es equivalente al método CMS de prioridad de tiempo de respuesta de la era anterior.
El proceso se divide en: