Pergunta

Qual é o significado do espaço PermGen em java?

Foi útil?

Solução

espaço

PermGen é reservada para objetos de longo prazo - principalmente Class objetos carregados pelo ClassLoader. PermGen não será lixo recolhido excepto em circunstâncias muito especiais (especificamente, quando o ClassLoader que carregado dessas classes ficar fora do âmbito).

Esta é uma otimização de coleta de lixo - se os objetos que não esperamos ser lixo coletado são armazenados separadamente, que compacta o espaço onde o resto dos objetos são armazenados, o que leva a menos trabalho para o coletor de lixo <. / p>

Outras dicas

O PermGen é específico para VMs ter coleta de lixo geracional.

Se você usar, digamos, JRockit, o "significado da PermGen" é inexistente porque JRockit não tem esse conceito.

Ele usa para ser comum, há alguns anos atrás, quando o estranho "fora do espaço PermGen" erros começaram a aparecer e que ninguém sabia ainda quem foi a culpa (Tomcat + Hibernate + Sun VM usado para acionar este) para substituir um do componente (hoje em dia os problemas são compreendidos, mas anos atrás, quando eles começaram a cortar era quase impossível encontrar qualquer informação sobre isso). Você poderia substituir Tomcat com resina ou o VM Sun com JRockit etc.

Eu acho que é importante salientar que PermGen não fazem parte das especificações Java e apenas um detalhe de implementação de (muito) algumas VMs.

A única coisa que você realmente precisa saber é que o espaço PermGen é separada da pilha geral e não é afetado pelo parâmetro VM -Xmx. Se você tiver um aplicativo que carrega muitas definições de classe (como um servidor de aplicativos ou um IDE), então você pode definir o tamanho do espaço PermGen usando a opção VM -XX:MaxPermSize.

A geração permanente detém meta-dados que descrevem classes de usuário (classes que não são parte da linguagem Java).

As aplicações com grande base de código pode encher este segmento da pilha que fará com que java.lang.OutOfMemoryError: PermGen. Esta não é afetado pela configuração -Xmx ou quanta memória você tem na máquina. Para definir um novo tamanho inicial, utilize -XX:PermSize=64m. Para definir um tamanho máximo, o uso -XX:MaxPermSize=128m

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