Como determinar o tamanho do Permgen dentro de um aplicativo Java (ou seja, programaticamente)?

StackOverflow https://stackoverflow.com/questions/4071440

Pergunta

  1. 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.

  2. Melhor ainda seria uma estimativa do consumo de memória de uma classe Java no Permgen. É quase proporcional ao tamanho do arquivo bytecode?

Foi útil?

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

Você pode usar jvisualvm ferramenta do JDK com Visual gc Plugin para monitorar todas as áreas de heap JVM, incluindo Permgen.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top