Recolección de basura: hablando sobre el algoritmo de basura JVM

1. Juicio de basura

1.1 Método de recuento de referencias
Cada objeto del montón tiene un recuento de referencias.Cuando se crea un objeto, una determinada referencia variable apunta a una instancia de este objeto.Entonces el recuento de objetos es 1. Cuando otras referencias variables también apuntan al El objeto es luego +1. Si otras variables cambian o exceden la supervivencia, entonces este recuento es -1. (Existe una desventaja obvia, cuando el objeto tiene una referencia circular, entonces el recuento de referencia del objeto nunca será 0)

1.2
El juicio de basura del método de análisis de accesibilidad comenzará desde el conjunto raíz (GC ROOT). Luego, busque el nodo que realiza la llamada. Después de encontrar el nodo, continúe mirando hacia abajo, y así sucesivamente. Entonces no se debe reciclar toda la cadena de llamadas, por el contrario Sí, se puede reciclar sin estar vinculado.
Entonces, cuáles se pueden usar como conjuntos raíz:
(1) Objetos de referencia en la pila de la máquina virtual
(2) Objetos referenciados por propiedades estáticas en el
área de método (3) Referencias constantes en el área de método Objeto
(4) Objeto de referencia de JNI en el área de método local
Mapa de red

2. Algoritmo de recuperación

2.1 Eliminación de marcas. Primero marque los objetos reciclables y luego límpielos. Como se muestra en la figura siguiente, las deficiencias también son obvias, habrá mucha fragmentación de la memoria después de borrar
Inserte la descripción de la imagen aquí

2.2 Marque la copia. Primero marque los objetos reciclables y luego copie los objetos supervivientes al otro lado. En este caso, generalmente se requieren dos espacios de memoria para usarse juntos, similar al área de origen y área de la generación.
Inserte la descripción de la imagen aquí

2.3 Marcado y clasificación Primero marque los objetos reciclables, luego mueva los objetos no reciclables a un extremo y luego recíclelos, preste atención a este orden.
Inserte la descripción de la imagen aquí

2.4 Algoritmo de generación. Este algoritmo de reciclaje generalmente divide el espacio de la memoria en la generación joven y la generación vieja. Después del área del montón, hay un metaespacio (generación permanente). La
generación joven se divide en un área Edén y dos áreas Supervivientes, que es el área desde y hasta el área. Características: Cada vez que un joven gc, se recicla una gran cantidad de objetos, por lo que los algoritmos de copia y copia se utilizan naturalmente aquí.
2.41 En muchos artículos, la proporción de eden de a es 8: 1: 1 De hecho, la asignación predeterminada no lo es. Primero use jmap -heap pid. Como se muestra en la siguiente figura,
Inserte la descripción de la imagen aquí
encontramos que la proporción no es 8: 1: 1. Si desea usar esta proporción, debe establecer dos parámetros .
(1) Desactive la adaptación de la estrategia de asignación de memoria ((habilitado de forma predeterminada), -XX: -UseAdaptiveSizePolicy
(2) Establezca manualmente la proporción entre el área de Eden y el área de Survivor, -XX: SurvivorRatio = 8

2.42 La generación joven ingresa a la generación anterior 15 veces, así que ¿por qué no 20 veces? En
la palabra de marca proporcionada por Hotspot, podemos ver los bits de identificación de la edad de generación, que son 4 bit
1111 convertidos a decimal (1 2 2 2) + ( 1 2 2) + (1 2) + (1 * 2 ^ 0) = 15

La generación anterior, cuando la generación joven sobrevive una cierta cantidad de veces, ingresa a la generación anterior. Por lo tanto, cada vez que se recicla una pequeña cantidad de objetos, se utiliza aquí el algoritmo de clasificación de marcas compactas.
Metaspace, la entrada anterior del blog I han estado allí, almacenando principalmente información de archivos de clases, variables estáticas, etc.

(La generación permanente en la figura es la forma existente antes de 1.8. 1.8 y después de que el metaespacio reemplaza a la generación permanente)
Inserte la descripción de la imagen aquí

3. Recolector de basura

3.1 Serie (copia marcada) El enfoque en serie en la generación joven de reciclaje GC requiere una pausa en el programa.
(1) Especifique los parámetros del recolector: -XX: + UseSerialGC
3.2 Serie antigua (clasificación marcada), versión antigua en serie, cuando se recolecta, se requiere Pause el programa, la capa inferior es el algoritmo de clasificación de marcas.
3.3 ParNew. (Copia) Versión serial multiproceso (el algoritmo de copia de generación joven algoritmo de marcado y clasificación de generación anterior), el único colector que se puede utilizar con CMS.
(1 ) Especifique el recopilador de CMS: -XX: + UseConcMarkSweepGC especifica que CMS usará ParNew como el recopilador de generación joven de forma predeterminada
(2) Especifique el uso del recopilador de ParNew: -XX: + UseParNewGC
(3) Especifique el número de subprocesos utilizados, el número predeterminado de CPU: -XX: ParallelGCThreads
3.4 Parallel Collector (copia), un recolector que se enfoca en el rendimiento.
(1) Tiempo de ejecución del código / (tiempo de ejecución del código + tiempo de recolección de basura) A partir de esta fórmula, se puede ver que el el tiempo de ejecución del código y el tiempo del recolector de basura se ven afectados (2) El parámetro principal que afecta el resultado, y este es un recolector, debe colocarse en el punto del tiempo del recolector de basura.
(3) Cuanto mayor sea el rendimiento, mejor, entonces, cuanto menor sea el tiempo de recolección de basura, mejor.
(4) - XX: MaxGCPauseMillis: milisegundos de tiempo de GC
(5) -XX: GCTimeRatio Relación de tiempo de GC
(6) En términos generales, si los dos parámetros anteriores se utilizan como límite, -XX: + UseAdaptiveSizePolicy generalmente se requiere para decirle a JVM, dinámico Cambie el tamaño del espacio de la generación joven.
3.5 Paralelo Viejo (copia) Versión anterior
3.6 CMS Collector (Mark-Clear) El blog de seguimiento se escribe por separado
3.7 G1 Collector se escribe por separado en el blog de seguimiento

Supongo que te gusta

Origin blog.csdn.net/weixin_45657738/article/details/109779897
Recomendado
Clasificación