Como determinar o tamanho do Permgen dentro de um aplicativo Java (ou seja, programaticamente)?
-
28-09-2019 - |
Pergunta
Existe alguma maneira de medir o atualmente usado Tamanho da geração permanente (PermGen) dentro do meu aplicativo Java? Não posso usar ferramentas de perfil externas, como o VisualVM.
Melhor ainda seria uma estimativa do consumo de memória de uma classe Java no Permgen. É quase proporcional ao tamanho do arquivo bytecode?
Solução
Você pode usar o MemoryMxBean que vem com o JDK. Mas não acho que exista uma maneira de consultar o uso de permgen de um aplicativo em execução. Documentos sobre MemoryMxBean.
Outras dicas
Se você não está no Windows, você pode tentar JMAP que é enviado com o JDK.
Você pode usar o jmap
comando:
JMAP [Opção] (para conectar ao processo em execução)
JMAP [Opção] (para conectar -se a um arquivo principal)
jmap [opção] [server_id@] (para conectar ao servidor de depuração remota)
Onde as opções são de:
-Heap: Para imprimir o resumo do heap java
-Permstat: para imprimir estatísticas de geração permanente
O tamanho do Permgen não tem nada a ver com o tamanho dos arquivos da sua classe. O tamanho padrão do Permgen de acordo com o Sun é de 64 MB. Se você deseja aumentá -lo, pode configurá -lo explicitamente usando:
-XX:PermSize=164m
na sua linha de comando java ou script de inicialização. É também assim que você pode saber como está definido sem depender de uma ferramenta externa.
EDITAR:
Leia este artigo para determinar aproximadamente quanto permgen está sendo usado atualmente programaticamente (ou seja, sem ferramentas externas):
http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen space.html