A maioria dos desenvolveres Java já se deparou com o seguinte erro: “java.lang.OutOfMemoryError: PermGen espace“. A máquina virtual Java possui uma área de memória chamada de Perm Generation, ou PermGen, este é um espaço de memória fora do heap onde são alocados objetos da própria VM, código de classes, objetos de reflexão, pool de strings, entre outros, geralmente, objetos cuja desalocação é rara.
Mas os problemas com estouro do PermGen são difíceis de diagnosticar justo porque não se trata de objetos do programa. Na maioria dos casos, está ligado a uma quantidade exagerada de classes que são carregadas na memória estourando o tamanho do PermGen.
Um exemplo clássico de problemas com PermGen é a execução do Eclipse com muitos plugins nas configurações padrões da JVM da Sun. Por causa da arquitetura de plugins bem organizada e encapsulada do Eclipse, muitas classes são carregadas na PermGen e a esta acabava transbordando. Um outro problema bem mais corriqueiro são os estouros do PermGen ao se fazer muitos redeploys nos servidores de aplicação.
Voltando para o ambiente padrão de desenvolvimento do Demoiselle e do Demoiselle-wzd, pontos críticos que podem ocasionar estouro de memória PermGen são: O próprio Eclipse, servidores de aplicações Web e a versão de teste do Eclipse com os plugins do Wizard. A solução para este problema é aumentar o espaço de memória reservado para o PermGen e a opção que faz esta alteração é -XX:MaxPermSize na inicialização da JVM. Exemplo:
java -XX:MaxPermSize=128m br.gov.demoiselle.InitClass
Neste caso, configuramos o tamanho máximo da memória de geração permanente para 128 megabytes,
sendo que o tamanho padrão é 64 megabytes.
No caso do nosso ambiente, para o Eclipse basta incluir (ou alterar) no arquivo eclipse.ini o comando para alterar o tamanho máximo da PermGen: -XX:MaxPermSize=512m. Para o servidor Web e o Eclipse de teste, deve-se alterar os argumentos da VM em “Run Configurations” ou “Debug Configurations” nas opções do próprio Eclipse.
Referências:
Solucionando o erro de Permgen Space
Gerenciamento de memória e garbage collector
Autor: Mario Costa