7.1* Cómo elegir el recolector de basura adecuado

Si su aplicación no tiene requisitos estrictos de latencia, simplemente debe ejecutar la aplicación y dejar que la propia JVM elija el recopilador adecuado.

En la mayoría de los casos, la configuración predeterminada funciona bien. Si es necesario, puede ajustar el tamaño del almacenamiento dinámico para mejorar el rendimiento. Si el rendimiento aún no es el esperado, intente modificar el recopilador para adaptarlo a los requisitos de su aplicación.

  • secuencial . Si la aplicación tiene un conjunto de datos pequeño (hasta aproximadamente 100 MB) y/o se ejecutará en un solo procesador sin requisitos de latencia.
  • Paralelo _ Si la prioridad es el rendimiento máximo de la aplicación y no hay requisitos de latencia (o se aceptan pausas de un segundo o más).
  • CMS/G1 . Si el tiempo de respuesta es más importante que el rendimiento general, las pausas de recolección de basura deben ser más cortas que un segundo.
  • ZGC . Si el tiempo de respuesta es de alta prioridad y/o se trata de un montón muy grande.

7.2* Recomendaciones para la recolección de basura

Evite los disparadores manuales

Además de los mecanismos básicos de recolección de basura, uno de los puntos más importantes de este proceso en Java es que no es determinista. Es decir, es imposible predecir cuándo ocurrirá exactamente en tiempo de ejecución.

Usando los métodos System.gc() o Runtime.gc(), puede incluir una sugerencia en su código para iniciar el recolector de elementos no utilizados, pero esto no garantiza que realmente se ejecutará.

Usar herramientas de análisis

Si no tiene suficiente memoria para ejecutar su aplicación, experimentará ralentizaciones, tiempos prolongados de recolección de basura, eventos de "parada mundial" y, finalmente, errores de falta de memoria. Esto puede indicar que el montón es demasiado pequeño, pero también puede indicar que la aplicación tiene una pérdida de memoria.

Puede usar una herramienta de monitoreo como jstat o Java Flight Recorder para ver si el uso del montón crece indefinidamente, lo que podría indicar un error en el código.

Preferir la configuración predeterminada

Si tiene una aplicación Java pequeña e independiente, probablemente no necesite configurar la recolección de elementos no utilizados. La configuración predeterminada le servirá bien.

Use banderas JVM para personalizar

El mejor enfoque para configurar la recolección de basura en Java es establecer indicadores JVM. Los indicadores se pueden usar para configurar el recolector de elementos no utilizados (por ejemplo, Serial, G1, etc.), el tamaño inicial y máximo del almacenamiento dinámico, el tamaño de las particiones del almacenamiento dinámico (por ejemplo, Generación joven, Generación anterior) y mucho más. más.

Elige el grifo adecuado

Una buena pauta en términos de configuración inicial es la naturaleza de la aplicación personalizada. Por ejemplo, el recolector de basura simultáneo es eficiente, pero a menudo genera eventos de "parada mundial", lo que lo hace más adecuado para el procesamiento interno donde las pausas largas son aceptables.

Al mismo tiempo, el recolector de basura CMS está diseñado para minimizar la latencia, lo que lo hace ideal para aplicaciones web donde la capacidad de respuesta es importante.