Pergunta

Estou confuso sobre dois parâmetros que podem controlar quando o coletor CMS entra em ação:

MaxHeapFreeRatio (70% por padrão)

CMSInitiatingOccupancyFraction (mais de 90% por padrão)

O que cada um desses parâmetros significa exatamente?Quando o coletor inicia (fase de marcação) e coleta (fase de varredura)?

Foi útil?

Solução

CMSInitiatingOccupancyFraction decide quando o CMS entra em ação (para que esta opção seja eficaz, você também deve definir -XX:+UseCMSInitiatingOccupancyOnly). MaxHeapFreeRatio é uma opção para dimensionar os espaços geracionais.

Veja por exemplo ...

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

A coleta simultânea geralmente não pode ser acelerada, mas pode ser iniciada mais cedo.Uma coleção simultânea começa a ser executada quando a porcentagem de espaço alocado na geração antiga ultrapassa um limite.Este limite é calculado com base na experiência geral com o coletor simultâneo.Se estiverem ocorrendo coletas completas, as coletas simultâneas talvez precisem ser iniciadas mais cedo.O sinalizador de linha de comando CMSInitiatingOccupancyFraction pode ser usado para definir o nível no qual a coleção é iniciada.Seu valor padrão é de aproximadamente 68%.A linha de comando para ajustar o valor é -XX:CMSInitiatingOccupancyFraction=<percent>

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

Por padrão, a máquina virtual aumenta ou diminui o heap em cada coleção para tentar manter a proporção de espaço livre para objetos vivos em cada coleção dentro de um intervalo específico.Este intervalo alvo é definido como uma porcentagem pelos parâmetros -XX:MinHeapFreeRatio=<minimum> e -XX:MaxHeapFreeRatio=<maximum>, e o tamanho total é limitado abaixo por -Xms e acima por -Xmx.

..ou ..

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

-XX:MaxHeapFreeRatio - quando a percentagem de espaço livre numa geração exceder este valor, a geração diminuirá para atingir este valor.O padrão é 70

EDITAR:Executei algumas simulações com um programa de teste que cria aleatoriamente mapas de matrizes de bytes e os copia.Percebi que a) o valor da fração não era respeitado - em particular com um valor conservador (digamos 50), o estágio inicial da marca CMS chutou muito além da ocupação de 50%, normalmente em torno de 70-80% e B), no entanto, valores de fração menores fizeram com que o CMS estágio inicial acontece mais cedo (programa usado -Xmx1536m -Xmx1536m -XX:NewSize=512m -XX:+UseConcMarkSweepGc + registro gc e os dois parâmetros de teste)

Também encontrei um relatório de bug antigo sobre isso: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486089

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top