2. Recolector de basura de Java

El algoritmo de recolección de basura es la metodología de recuperación de memoria, y el recolector de basura es la implementación específica de la recuperación de memoria. La siguiente figura muestra 7 generaciones diferentes de colectores. Si existe una conexión entre los dos colectores, significa que se pueden usar juntos. No existe el mejor colector, lo que debemos elegir es el colector más adecuado para la aplicación específica.

1) Recolector de basura en serie (hilo único, algoritmo de copia): la nueva generación
    es el recolector de basura más básico, utilizando el algoritmo de copia, que solía ser el único recolector de basura en la nueva generación antes de JDK1.3.1. Serial es un recolector de subproceso único. No solo usa una CPU o un subproceso para completar la recolección de basura, sino que también debe suspender todos los demás subprocesos de trabajo mientras la recolección de basura está en progreso hasta que finalice la recolección de basura. Aunque el recolector de elementos no utilizados serial necesita suspender todos los demás subprocesos de trabajo durante el proceso de recolección de elementos no utilizados, es simple y eficiente.Para un entorno de CPU único limitado, no hay sobrecarga de interacción de subprocesos y se puede obtener la mayor eficiencia de recolección de elementos no utilizados de un solo subproceso. Por lo tanto, el recolector de basura serial sigue siendo el recolector de basura de nueva generación predeterminado para la máquina virtual Java que se ejecuta en modo Cliente.

2) Recolector de basura ParNew (Serial+Multithreading)--El recolector ParNew de nueva generación
es en realidad una versión multiproceso del recolector Serial.Es el recolector de nueva generación preferido para muchas máquinas virtuales que se ejecutan en modo Servidor

Además de utilizar subprocesos múltiples para la recolección de elementos no utilizados, el recolector de elementos no utilizados ParNew se comporta exactamente igual que el recolector de elementos Serial El recolector de elementos no utilizados ParNew también suspende todos los demás subprocesos de trabajo durante la recolección de elementos no utilizados.

El recopilador ParNew abre la misma cantidad de subprocesos que la cantidad de CPU de forma predeterminada, y la cantidad de subprocesos del recolector de elementos no utilizados puede limitarse mediante el parámetro -XX:ParallelGCThreads. [Paralelo: Paralelo]

3) Recolector de barrido paralelo (algoritmo de copia de subprocesos múltiples, alta eficiencia) -- nueva generación

El recopilador Parallel Scavenge también es un recolector de elementos no utilizados de nueva generación. También utiliza el algoritmo de copia y también es un recolector de elementos no utilizados de subprocesos múltiples. Se centra en el programa para lograr un rendimiento controlable (Pensamiento, el tiempo que se utiliza la CPU para ejecutar el usuario). código/tiempo de consumo total de CPU, es decir, rendimiento = tiempo de código de usuario en ejecución/(tiempo de código de usuario en ejecución + tiempo de recolección de elementos no utilizados), un alto rendimiento puede hacer el uso más eficiente del tiempo de CPU y completar las tareas de cálculo del programa como tan pronto como sea posible, aplicable principalmente a Tareas que operan en segundo plano sin requerir mucha interacción. La estrategia de ajuste adaptativo también es una diferencia importante entre el colector ParallelScavenge y el colector ParNew.

4) Colector CMS (algoritmo de marcado y barrido multiproceso)

Es un recolector cuyo objetivo es obtener el menor tiempo de pausa de recolección. Ventajas: colección concurrente, pausa baja . Basado en el algoritmo de "marcar y barrer". En la actualidad, gran parte de las aplicaciones Java se concentran en el lado del servidor del sitio web de Internet o sistema B/S. Este tipo de aplicaciones presta especial atención a la velocidad de respuesta del servicio. Se espera que el tiempo de pausa del sistema sea el más corto, para brindar una mejor experiencia a los usuarios Colector CMS Es muy adecuado para las necesidades de este tipo de aplicaciones. El proceso de operación es más complicado y se divide en 4 pasos:

defecto:

Es muy sensible a los recursos de la CPU y los programas diseñados para la concurrencia serán más sensibles a los recursos de la CPU. Número de subproceso de reciclaje predeterminado de CMS: (número de CPU+3)/4

No se puede manejar la basura flotante , "Error de modo concurrente" puede fallar y causar que ocurra otro GC completo. La basura generada por el programa de usuario que se ejecuta en la fase de limpieza concurrente ha pasado la fase de marcado y no se puede limpiar en esta colección, que se denomina basura flotante. De forma predeterminada, el recopilador de CMS se activa después de que se utiliza el 68 % del espacio en la generación anterior. Si la generación anterior no está creciendo muy rápido, puede aumentar adecuadamente el parámetro -XX:CMSInitiatingOccupancyFraction para aumentar el porcentaje de activación, pero si es demasiado alto, conducirá fácilmente a la falla de "Falla de modo concurrente".

Basado en el algoritmo de "marcar y barrer", se generará una gran cantidad de basura espacial . El parámetro modificador -XX:+UseCMSCompactAtFullCollection se proporciona para el proceso de desfragmentación después del servicio Full GC y el proceso de desfragmentación de la memoria no puede ser simultáneo. Pero el tiempo de pausa será más largo.

-XX:CMSFullGCsBeforeCompation establece el número de GC completos sin compresión, seguido de uno con compresión.

 5. Colector G1 (admite tanto la nueva como la antigua generación)

El primer recolector de basura Garbage es el logro más avanzado en el desarrollo de la teoría del recolector de basura. En comparación con el recolector CMS, las dos mejoras más destacadas del recolector G1 son:

1. Según el algoritmo de clasificación por marcas, no se produce fragmentación de la memoria.
2. El tiempo de pausa se puede controlar con mucha precisión y se puede lograr una recolección de basura de pausa baja sin sacrificar el rendimiento.
El recolector G1 evita la recolección de elementos no utilizados de área completa. Divide la memoria del montón en varias áreas independientes de tamaño fijo y realiza un seguimiento del
progreso de la recolección de elementos no utilizados en estas áreas. Al mismo tiempo, mantiene una lista de prioridades en segundo plano, cada vez que de acuerdo al tiempo de recolección permitido, se recolectan primero
las áreas con más . El mecanismo de división de áreas y reciclaje de áreas prioritarias asegura que el recolector G1 pueda obtener la mayor
eficiencia de recolección de basura en un tiempo limitado.

Supongo que te gusta

Origin blog.csdn.net/lzzyok/article/details/121324789
Recomendado
Clasificación