/ / Java Heap Distribution Concept Query - java, java-ee, memória, gerenciamento de memória

Consulta do Conceito de Distribuição de Pilha Java - java, java-ee, memória, gerenciamento de memória

Estou usando os parâmetros de memória abaixo do GC:

export MEM_OPTS = "- Xmx2900m -Xms2900m -XX: NewSize = 786m -XX: MaxNewSize = 786m -XX: + UseTLAB -XX: MaxPermSize = 128m"

Estou usando a JVM de 32 bits. A RAM do meu servidor é 10 GB.

No site da Oracle, eu recebi

Por que não consigo um pilha maior com a JVM de 32 bits?

O máximo teórico limite de pilha para a JVM de 32 bits é 4G. Devido a várias restrições adicionais, como troca disponível, uso do espaço de endereço do kernel, fragmentação da memória e sobrecarga da VM, na prática, o limite pode ser muito menor. Na maioria dos sistemas Windows de 32 bits modernos, oo tamanho máximo da pilha varia de 1,4G a 1,6G. Nos kernels Solaris de 32 bits, o espaço de endereço é limitado a 2G. Em sistemas operacionais de 64 bits executando a VM de 32 bits, o tamanho máximo de heap pode ser maior, aproximando-se do 4G em muitos sistemas Solaris. A partir do Java SE 6, o recurso boot.ini do Windows / 3GB não é suportado. Se seu aplicativo exigir um heap muito grande, você deverá usar uma VM de 64 bits em uma versão do sistema operacional que suporte aplicativos de 64 bits. Consulte Configurações do sistema suportado do Java SE para obter detalhes.

Ok. Agora vamos assumir meu servidor de 32 bits pode ter 3,2 GB. Como eu sei:

-Xmx is the total heap memory
-XX:NewSize / -XX:MaxNewSize is the range of the size of the new generation inside that heap
the difference is the range of the size of the old generation
-XX:PermSize / -XX:MaxPermSize is the range of the size of the permanent generation, which is the non-heap memory

De acordo com isso, 3,2 GB não devem incluir PermSize, pois este não é um conteúdo de heap.

Deixe-me saber se estou errado.

Posso dividir 3,2 GB em Xmx e NewSize. Direito ?

Respostas:

1 para resposta № 1

O NewSize é uma parte do tamanho máximo de heap. Deve ser menor.

Eu usaria a JVM de 64 bits se você tiver o Java 6, pois isso tornará sua vida mais simples. ;) A menos que você precise usar bibliotecas de compartilhamento de 32 bits, há pouca desvantagem.

BTW -XX:+UseTLAB é o padrão.