- ¿Es G1 el recopilador predeterminado en Java 7 y si no, cómo activo G1?
G1 no es el recopilador predeterminado en Java 7. -XX:+UseG1GC
habilitará G1GC
- ¿Qué configuraciones opcionales tiene g1 en Java7?
Hay muchos. Eche un vistazo a este artículo de Oracle para obtener información completa.
El G1 GC es un recolector de basura adaptable con valores predeterminados que le permiten funcionar de manera eficiente sin modificaciones.
Por esta razón, personalice los parámetros críticos
-XX:MaxGCPauseMillis
-XX:G1HeapRegionSize
-XX:ParallelGCThreads
-XX:ConcGCThreads
y deje todos los demás parámetros al valor predeterminado .
A continuación, se muestra una lista de opciones importantes y sus valores predeterminados. Esta lista se aplica a la última máquina virtual Java HotSpot, compilación 24. Puede adaptar y ajustar la configuración de G1 GC en la línea de comandos de JVM.
Valores predeterminados importantes:
-XX:G1HeapRegionSize=n
Establece el tamaño de una región G1. El valor será una potencia de dos y puede oscilar entre 1 MB y 32 MB. El objetivo es tener alrededor de 2048 regiones basadas en el tamaño mínimo del montón de Java.
-XX:MaxGCPauseMillis=200
Establece un valor objetivo para el tiempo máximo de pausa deseado. El valor predeterminado es 200 milisegundos. El valor especificado no se adapta a su tamaño de pila.
-XX:G1NewSizePercent=5
Establece el porcentaje del montón que se utilizará como mínimo para el tamaño de la generación joven. El valor predeterminado es el 5 por ciento de su montón de Java.
-XX:G1MaxNewSizePercent=60
Establece el porcentaje del tamaño del montón que se utilizará como máximo para el tamaño de la generación joven. El valor predeterminado es el 60 por ciento de su montón de Java.
-XX:ParallelGCThreads=n
Establece el valor de los subprocesos de trabajo STW. Establece el valor de n en el número de procesadores lógicos. El valor de n es el mismo que el número de procesadores lógicos hasta un valor de 8.
Si hay más de ocho procesadores lógicos, establece el valor de n en aproximadamente 5/8 de los procesadores lógicos. Esto funciona en la mayoría de los casos excepto en sistemas SPARC más grandes donde el valor de n puede ser aproximadamente 5/16 de los procesadores lógicos.
-XX:ConcGCThreads=n
Establece el número de hilos de marcado paralelos. Establece n en aproximadamente 1/4 del número de subprocesos de recolección de basura paralelos (ParallelGCThreads).
-XX:InitiatingHeapOccupancyPercent=45
Establece el umbral de ocupación del montón de Java que activa un ciclo de marcado. La ocupación predeterminada es el 45 por ciento de todo el montón de Java.
-XX:G1MixedGCLiveThresholdPercent=65
Establece el umbral de ocupación para que una región antigua se incluya en un ciclo de recolección de basura mixta. La ocupación predeterminada es del 65 por ciento
-XX:G1HeapWastePercent=10
Establece el porcentaje de montón que está dispuesto a desperdiciar. La máquina virtual Java HotSpot no inicia el ciclo de recolección de basura mixta cuando el porcentaje recuperable es menor que el porcentaje de desperdicio de pila
-XX:G1MixedGCCountTarget=8
Establece el número objetivo de recolecciones de basura mixtas después de un ciclo de marcado para recolectar regiones antiguas con como máximo G1MixedGCLIveThresholdPercent datos en vivo. El valor predeterminado es 8 recolecciones de basura mixtas
-XX:G1OldCSetRegionThresholdPercent=10
Establece un límite superior en la cantidad de regiones antiguas que se recopilarán durante un ciclo de recolección de basura mixta. El valor predeterminado es el 10 por ciento del montón de Java
-XX:G1ReservePercent=10
Establece el porcentaje de memoria de reserva que se debe mantener libre para reducir el riesgo de desbordamientos de espacio. El valor predeterminado es el 10 por ciento. Cuando aumente o disminuya el porcentaje, asegúrese de ajustar el montón de Java total en la misma cantidad.
Ha vuelto a configurar muchos parámetros de G1GC, que no son necesarios si sigue la página de documentación anterior. Verifique las recomendaciones anteriores, especialmente en ParallelGCThreads y ConcGCThreads , que se basarán en los núcleos de su CPU. Elimine la reconfiguración de los parámetros innecesarios.
Recomendaciones de Oracle:
Cuando evalúe y ajuste G1 GC, tenga en cuenta las siguientes recomendaciones:
Tamaño de la generación joven : Evite establecer explícitamente el tamaño de la generación joven con la -Xmn
opción o cualquier otra opción relacionada, como -XX:NewRatio
. La fijación del tamaño de la generación joven anula el objetivo de tiempo de pausa .
Objetivos de tiempo de pausa: cuando evalúa o ajusta cualquier recolección de basura, siempre existe una compensación entre latencia y rendimiento. El G1 GC es un recolector de basura incremental con pausas uniformes, pero también más sobrecarga en los subprocesos de la aplicación. El objetivo de rendimiento del G1 GC es el 90 por ciento del tiempo de aplicación y el 10 por ciento del tiempo de recolección de basura .
- ¿Se realizaron cambios en otros colectores como cms o el colector paralelo en Java 7?
Hay algunos cambios con Java 7. Eche un vistazo a este artículo.
- ¿Dónde puedo encontrar buena documentación sobre la recolección de basura en Java 7?
Consulte la página de documentación de Oracle sobre gc y la pregunta SE relacionada:
Recolección de basura Java G1 en producción