/ / Permgen e Garbage collection Java, Rebentando mitos do permgen - java, coleta de lixo, permgen

Permgen e coleta de lixo Java, rebentando mitos do permgen - java, coleta de lixo, permgen

Eu sei que na JVM, a área permgen é usadapara armazenar definições de classe. No meu Tomcat eu vejo que o uso de memória atual do permgen está próximo de 100MB, parece que ele está apenas crescendo ao longo do tempo, mesmo que não haja ninguém usando os aplicativos no Tomcat Minhas perguntas são:

É verdade que o permgen nunca é coletado, quero dizer que a memória usada lá continua crescendo e crescendo?

Quando o permgem recebe o lixo coletado?

O que significa "CMSPermGenSweepingEnabled" e "CMSClassUnloadingEnabled"?

Meu tamanho máximo de permgem é 256 e não quero ter um OutMemoryException na próxima semana.

Por favor, apenas respostas precisas e documentadas.

Eu uso o Tomcat 7, Java 7, eu uso muito a técnica de implantação paralela e eu faço undeploys, reimplanta várias vezes por semana. Eu nunca uso o método intern () de Strings

Respostas:

2 para resposta № 1

na verdade, não é verdade que o Permgen nunca obtém o lixo coletado. Ele contém as classes que foram carregadas pelo aplicativo e são coletadas quando carregadores de classes coletam lixo, normalmente em cenários de reafectação.

Você pode usar esses sinalizadores de JVM para ver quando as classes são carregadas e descarregadas do permgen:

-XX:+TraceClassLoading -XX:+TraceClassUnloading

Para ver quais classes estão sendo carregadas, use este sinalizador:

-verbose:class

Se a aplicação for de reflexão intensiva, isso pode ser uma causa também, dê uma olhada nisso respondatente usar visualvm tomar dumps de pilha um olhar para as classes chamado mentira sun.reflect.GeneratedMethodAccessor11.

Para os sinalizadores de coleta de lixo, consulte este responda, mas a melhor aposta para consertar o vazamento do permgen é ver quais classes estão sendo criadas e por que usar algumas ferramentas / logs.