Humor, novidades e besteiras do cotidiano

quarta-feira, 11 de março de 2009

Tecnologia - Java PermGen space

java.lang.OutOfMemoryError: PermGen space
Muitos desenvolvedores java ainda vão ou já se depararam com esse erro maldito na hora de rodar um programa. O pior é que às vezes ele só acontece na hora que sobe a aplicação no servidor para uso real (e não para testes de desenvolvimento).
Não tema, pois esse erro é facilmente corrigido...

Antes, vamos entender o que é esse tal de PermGen space?
O Java Virtual Machine tem uma área de memória aonde são armazenados objetos de baixo uso como código de classes, e pool de strings, por exemplo (essa área é o PermGen space, ou em outras palavras, o espaço de geração permanente). Como esta área de memória é limitada, seu uso intenso pode gerar erros com a mensagem colocada no topo deste tópico. Outra causa desse problema também pode ser a maneira como foram amarrados os objetos, impedindo o Garbage Collector de liberar espaço na memória.

Como resolver esse problema?
Bom, se a causa do problema for nas amarrações, será necessária uma revisão no código pra ver quais variáveis não estão sendo liberadas após o uso (às vezes, basta colocar o valor igual a null após o uso pra resolver esse problema).
Mas, se a causa for a intensidade do uso, basta aumentar o tal espaço de memória adicionando a seguinte tag na hora de rodar o programa: -XX:MaxPermSize=128m (lembrando que o default é 64m e até aonde eu sei pode ir até 1024m).
Só pra confirmar o entendimento, na hora de rodar, deve-se colocar o comando da seguinte maneira:
java -XX:MaxPermSize=128m nomeDoPacote.NomeDaClasse
Agora, pode ser que você use o JBoss, e nele roda um bat (encontrado no diretório bin) então, pra resolver o problema nesse caso, procure o campo do JAVA_OPTS e adicione a tag como abaixo:
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:MaxPermSize=128m
Acredito que com esses 2 exemplos, já é possível se imaginar como resolver o mesmo problema mas em outros cenários, não?

Espero ter ajudado alguém com esse post...
Abraços!

Um comentário:

Anônimo disse...

isso soh retarda o problema affff