Coleta de Lixo Java, Tenuring Baseado em Classe

9

Eu tenho jogado com os parâmetros do coletor de lixo de Java, e estou vendo coleções de lixo pequenas caras e frequentes à medida que o espaço eden / survivor é preenchido. Isto é devido a eu alocar um pool de objetos muito grandes. Esses objetos que conheço são "permanentes", pois são reutilizados, mas nunca serão reutilizados. Portanto, estou tentando encontrar uma maneira de "colocar" automaticamente objetos desses tipos na geração antiga, e não na nova.

Atualmente, estou contornando esse problema alocando uma nova geração muito grande (para evitar os GCs menores muito frequentes), infelizmente, isso significa que cada coleção individual é mais cara.

Eu gostaria de poder especificar, por classe, uma taxa de posse, e defini-lo como muito baixo para as classes específicas de objetos que eu sei que nunca serão GCed (e que são muito grandes) (no caso dele, é sobre

Meu aplicativo é altamente sensível à latência.

Minha configuração atual está usando o CMS com um tamanho de heap mínimo / máximo de 48.

Isso é possível? Eu pesquisei todos os possíveis sinalizadores da JVM e não consigo encontrar nada nesse sentido, e não consigo ver uma maneira de fazer isso com um carregador de classes personalizado.

    
por user1018513 02.04.2014 в 17:06
fonte

1 resposta

2

Considerando o Hotspot, não existe um flag que permita a você alocar certas instâncias de Class diretamente no OldGen.

Se o pool for realmente reutilizado e "permanente", você deverá receber gcs menores freqüentes somente durante a alocação do pool. Você precisa executar seu aplicativo por um longo período de tempo e ver se o pool foi de fato garantido. Depois disso, você não deve ver nenhum GC menor causado pelo uso do pool.

    
por Ales 04.04.2014 / 01:43
fonte