Pergunta

cada 15-30 minutos Netbeans mostra um "java.lang.OutOfMemoryError: PermGen space". Pelo que eu aprendi com Google este parece estar relacionada a vazamentos carregador de classe ou vazamentos de memória em geral.

Infelizmente, todas as sugestões que eu encontrei foram relacionados com servidores de aplicação e não tenho idéia para adaptou-os ao NetBeans. (Eu não estou sequer a certeza que é o mesmo problema)

É um problema na minha aplicação? Como posso encontrar a fonte?

Foi útil?

Solução

É por causa do carregamento de classe constante.

código Java byte lojas de classe e todas as constantes (por exemplo, as constantes string) na pilha permanente que não é lixo coletado por padrão (que fazem sentido na maioria das situações porque as classes são carregados apenas uma vez durante a vida de uma aplicação).

Em aplicações que muitas vezes carregam aulas durante uma vida inteira, que são:

  • servidores web e de aplicações durante a reafectação quente;
  • O IDE ao executar aplicativos desenvolvidos (cada vez que você clicar no botão Run no NetBeans ou eclipse ele carrega as classes da sua aplicação um novo);
  • etc este comportamento é impróprio porque uma pilha preenche completo eventualmente.

Você precisa ativar coleção monte de lixo permanente para evitar este erro.

Eu uso opções

-XX:MaxPermSize=256M
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

(parou meu eclipse 3.4 de jogar "java.lang.OutOfMemoryError: PermGen space" por isso também deve trabalhar com o NetBeans).

Editar : Basta notar que para Netbeans você definir essas opções em: [Netbeans installation]\etc\netbeans.conf Você deve prefixe essas opções com -J e adicioná-los em netbeans_default_options (ver comentários em netbeans.conf para mais informações).

Outras dicas

Tente adicionar o seguinte argumento para netbeans netconf: -J-XX: MaxPermSize = 256m

Veja este ligar sobre como definir o tamanho do PermSize. Muito provavelmente este não é um problema do seu código, por isso a única solução seria aumentar o a PermSize. Eu descobri que isso é, muitas vezes, quando você trabalha com JAXB. Em geral, se você usar muitas bibliotecas que se também dependem de muitos outros arquivos jar, o tamanho padrão do espaço PermGen pode não ser grande o suficiente.

Veja estas mensagens de blog para mais detalhes: Classloader vazamentos Como corrigir o temido "java.lang.OutOfMemoryError: PermGen space"

Se estiver a desenvolver uma aplicação web, tente colocar opção de vm servidor no

-Xmx512m -Xms512m XX: MaxPermSize = 512m

Vá para Ferramentas / servidores // Plataforma Opções / VM (Netbeans 7.4)

Você pode alterar as opções de inicialização do netbeans JVM editando o /etc/netbeans.conf arquivo. Muitas vezes eu tenho esse tipo de erros quando eu desenvolver um Webapp e eu implantá-lo muitas vezes. Nesse caso, eu reiniciar o tomcat de tempos em tempos.

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