PermGen Space

PermGen Space

OutOfMemoryError: PermGen space

Vamos entender porque o erro de PermGen ocorre, tanto em servidores de aplicação – como o Tomcat e OC4J, como em aplicações desktop.

A JVM separa uma área fixa de memória no momento da inicialização, chamada de Perm Generation, ou Geração Permanente, onde são armazenados os objetos estáticos, objetos de reflexão (Class, Method e Field), objetos do ClassLoader e o Pool de Strings. Essa área de memória não costuma ter muitas atualizações e, com isso, os objetos costumam demorar para serem desalocados. Quando vários deploys consecutivos são realizados, muita sujeira vai sendo acumulada nessa área.

Esse espaço é independente do Java Heap Space, tendo alocações distintas e, por padrão, a área utilizada para o PermGen é 64mb. Quando essa área de memória atinge um limite, o seguinte erro é gerado:

java.lang.OutOfMemoryError: PermGen space

Para evitar esse erro, podemos definir o tamanho dessa área na inicialização da JVM, através do parâmetro -XX:MaxPermSize.

Erro de PermGen space é muito comum em servidores de aplicação com muitas bibliotecas e/ou grande quantidade de classes. Para configurar o PermGen no Eclipse com o OC4J, siga os passos abaixo (serve também para Tomcat ou qualquer outro servidor de aplicação):

Clique na aba “Servers”, clique duas vezes sobre o servidor e selecione “Open launch configuration”.

Permgen space | Server

Selecione a aba “Arguments” e, no campo “VM arguments”, informe o tamanho da memória, através do parâmetro “-XX:MaxPermSize=512m”. Estamos definindo que o tamanho máximo do espaço utilizado para a memória PermGen será de 512mb.

MaxPermSize - Set

Pronto. Reinicie o servidor e o problema deve estar “resolvido”. Lembrando que, geralmente, erros de PermGen space não indicam que você deve simplesmente aumentar a área de memória, você pode estar apenas retardando o problema. Geralmente esse erro ocorre devido a algum vazamento de memória de alguma biblioteca ou alguma classe do seu projeto. É recomendado que você utilize um profiler para identificar quem está prendendo lixo na memória.

Boa sorte.

4 Replies to “PermGen Space”

Deixe uma resposta

O seu endereço de e-mail não será publicado.