domingo, 22 de junho de 2008

PermGen Error using Eclipse JEE + TomCat6 + Jdk6

Ao começar a desenvolver sistemas para WEB com JAVA (jsp + servlet), um dos problemas que tive foi um erro gerado pela JVM quando eu executava o eclipse para programar.
Eu estava utilizando o Eclipse JEE (64 bits) + JDK6(64) + TomCat6. Após alguns minutos editando algum arquivo no eclipse ou mesmo tentando executar a aplicação, o seguinte erro era gerado e meu eclipse travava:


java.lang.OutOfMemoryError: PermGen space
Exception in thread "Timer-2" java.lang.OutOfMemoryError: PermGen space



Este erro pode ocorrer devido aos recursos que são utilizados pela aplicação, e que estouram o limite de memória definido pela JVM para armazenar recursos como classes e métodos que são carregados durante a execução de um programa em JAVA. Esta limitação está associada ao conceito de Permanent Generation da JVM. Abaixo segue a definição do Permanent Generation segundo a própria sun:

The permanent generation is special because it holds data needed by the virtual machine to describe objects that do not have an equivalence at the Java language level. For example objects describing classes and methods are stored in the permanent generation.


Porém esta limitação não é fixa e pode ser alterada durante a execução dos programas através de opções passadas para à JVM. A opção a ser alterada neste caso é a opção XX:MaxPermSize=512m.

Porém como estamos falando da execução do eclipse com os recursos necessários para uma aplicação web, para passar estas opções para o mesmo, basta editar o arquivo eclipse.ini no root do eclipse. Adicione as opções abaixo:


-Xms128m
-Xmx1024m
-XX:MaxPermSize=512m


Agora inicie o eclipse novamente e assim como no meu caso, deverá funcionar.

Mais detalhes sobre Generations e Permanent Generations podem ser encontrados no link abaixo:
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

Referências:
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

Nenhum comentário:

Postar um comentário