En este tutorial aprenderemos sobre varios colectores de basura existentes. En Java, la recolección de basura es un proceso automático que puede reemplazar a los programadores con tareas complejas como la asignación de memoria y el reciclaje. Este artículo es el tercer artículo de la serie de tutoriales de recolección de basura. En la parte 2 anterior, vimos cómo funciona la recolección de basura en Java. Ese es un artículo interesante. Te recomiendo que eches un vistazo. La primera parte presenta la recolección de basura de Java, principalmente que incluye arquitectura JVM, modelo de memoria de montón y algunos términos de Java.
Java tiene cuatro tipos de recolectores de basura:
Recolector de basura en serie
Recolector de basura paralelo
Recolector de basura de exploración de etiquetas concurrentes (recolector de basura CMS)
Recolector de basura G1
Cada tipo tiene sus propias fortalezas y debilidades. Es importante destacar que cuando programamos, podemos seleccionar el tipo de recolector de basura a través del JVM. Seleccionamos pasando parámetros al JVM. Cada tipo es muy diferente y puede proporcionarnos un rendimiento de la aplicación completamente diferente. Es muy importante comprender cada tipo de recolector de basura y tomar la decisión correcta en función de la selección de aplicaciones.
1. Recolector de basura en serie
El recolector de basura en serie funciona manteniendo todos los hilos de la aplicación. Está diseñado para un entorno de un solo hilo y usa un solo hilo para la recolección de basura, y funciona congelando todos los subprocesos de aplicación, por lo que es posible que no sea adecuado para entornos de servidor. Es el más adecuado para programas de línea de comandos simples.
El recolector de basura en serie se puede usar a través del parámetro JVM -xx:+UserialGC.
2. Recolector de basura paralelo
El recolector de basura paralelo también se llama WearputCollector. Es el recolector de basura predeterminado para JVM. A diferencia de los colectores de basura en serie, utiliza múltiples lectura para la recolección de basura. Del mismo modo, también congela todos los hilos de aplicación al realizar recolección de basura
3.
La recolección de basura de etiquetas concurrentes utiliza escaneo multiproceso de memoria de montón, marcando instancias que deben limpiarse y limpiar instancias marcadas. El recolector de basura de etiqueta concurrente solo contendrá todos los hilos de la aplicación en los siguientes dos casos.
Cuando el objeto de referencia etiquetado está en el área titular;
Durante la recolección de basura, los datos en la memoria del montón se cambian simultáneamente.
El recolector de basura de escaneo de etiquetas concurrentes utiliza más CPU para garantizar el rendimiento del programa que los recolectores de basura paralelos. Si podemos asignar más CPU para un mejor rendimiento del programa, entonces el marcado concurrente en el recolector de basura de escaneo es una mejor opción que el colector de basura concurrente.
Abra el recolector de basura de exploración de marca concurrente a través del parámetro JVM xx: + UseParNewGC.
4. G1 recolector de basura
El recolector de basura G1 es adecuado para situaciones en las que la memoria del montón es grande. Divide la memoria del montón en diferentes áreas y la basura la recoge simultáneamente. G1 también puede comprimir el espacio de memoria del montón restante después de recuperar la memoria. El escaneo concurrente marca el recolector de basura comprime la memoria en el estuche STW. La recolección de basura G1 dará prioridad al área con la mayor cantidad de basura en la primera pieza.
Use el recolector de basura G1 a través del parámetro JVM XX:+USEG1GC
Nuevas características de Java8
Cuando use el recolector de basura G1, use el parámetro JVM -xx:+useStringdedUpplication. Podemos optimizar la memoria del montón eliminando cadenas duplicadas y manteniendo solo un char []. Esta opción se introdujo en Java8u20.
Hemos dado a los cuatro recolectores de basura Java, que uno debe usarse en función de los escenarios de aplicaciones, el rendimiento del hardware y los requisitos de rendimiento.
Configuración de JVM para recolección de basura
Las siguientes configuraciones de clave JVM están relacionadas con la recolección de basura Java.
Tipo de recolector de basura en funcionamiento
| Configuración | describir |
|---|---|
| -Xx:+useerialgc | Recolector de basura en serie |
| -Xx:+useparallelgc | Recolector de basura paralelo |
| -Xx:+useconcmarksweepgc | Recolector de basura de escaneo de etiquetas concurrentes |
| -Xx: parallelcmsthreads = | Tag de escaneo de etiqueta concurrente Garbage Collector = Número de hilos utilizados |
| -Xx:+useG1gc | Recolector de basura G1 |
Configuración optimizada de GC
| Configuración | describir |
|---|---|
| -Xmms | Inicializar el tamaño de la memoria del montón |
| -Xmx | Valor máximo de memoria de montón |
| -Xmn | Tamaño de la crónica |
| -Xx: permanente | Inicializar el tamaño de la generación permanente |
| -Xx: maxPermizize | Capacidad máxima de generación permanente |
Ejemplo del uso de parámetros JVM GC
java -xmx12m -xms3m -xmn1m -xx: permSize = 20m -xx: maxPermsize = 20m -xx:+useerialgc -jar java -application.jar
Resumir
Lo anterior se trata de una breve comprensión de los tipos de recolectores de basura de Java en este artículo, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!