Pregunta

Estoy confundido acerca de dos parámetros que pueden controlar cuándo se activa el recopilador de CMS:

MaxHeapFreeRatio (70% por defecto)

CMSInitiatingOccupancyFraction (más del 90% por defecto)

¿Qué significa exactamente cada uno de esos parámetros?¿Cuándo comienza el recolector (la fase de marcado) y la recolección (la fase de barrido)?

¿Fue útil?

Solución

CMSInitiatingOccupancyFraction decide cuándo se activa el CMS (para que esta opción sea efectiva también debes configurar -XX:+UseCMSInitiatingOccupancyOnly). MaxHeapFreeRatio es una opción para dimensionar los espacios generacionales.

Ver por ejemplo...

http://java.sun.com/docs/hotspot/gc1.4.2/faq.html

La recopilación simultánea generalmente no se puede acelerar, pero se puede iniciar antes.Una colección simultánea comienza a ejecutarse cuando el porcentaje de espacio asignado en la generación anterior cruza un umbral.Este umbral se calcula en función de la experiencia general con el recopilador concurrente.Si se están produciendo recopilaciones completas, es posible que sea necesario iniciar las recopilaciones simultáneas antes.El indicador de línea de comando CMSInitiatingOccupancyFraction se puede utilizar para establecer el nivel en el que se inicia la colección.Su valor predeterminado es aproximadamente 68%.La línea de comando para ajustar el valor es -XX:CMSInitiatingOccupancyFraction=<percent>

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

De forma predeterminada, la máquina virtual aumenta o reduce el montón en cada colección para intentar mantener la proporción de espacio libre para los objetos vivos en cada colección dentro de un rango específico.Este rango objetivo se establece como porcentaje mediante los parámetros -XX:MinHeapFreeRatio=<minimum> y -XX:MaxHeapFreeRatio=<maximum>, y el tamaño total está limitado a continuación por -Xms y arriba por -Xmx.

..o ..

http://www.petefreitag.com/articles/gctuning/

-XX:MaxHeapFreeRatio - cuando el porcentaje de espacio libre en una generación supere este valor, la generación se reducirá para alcanzar este valor.El valor predeterminado es 70

EDITAR :Ejecuté algunas simulaciones con un programa de prueba que crea aleatoriamente mapas de matrices de bytes y los copia.Noté que a) no se respetaba el valor de la fracción, en particular con un valor conservador (digamos 50), la etapa de la marca inicial de CMS empató mucho más de un 50% de ocupación, típicamente alrededor del 70-80% yb), sin embargo, los valores de fracción más pequeños hicieron que los CMS CMS hicieron que el CMS fuera el CMS. La etapa inicial ocurre anteriormente (programa utilizado -Xmx1536m -Xmx1536m -XX:NewSize=512m -XX:+UseConcMarkSweepGc + registro de gc y los dos parámetros de prueba)

También encontré un informe de error antiguo sobre esto: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486089

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top