Pergunta

Como é que cada objeto parece ser marcada nova, em vez de objetos apenas que estão no segundo instantâneo, mas não no meu baseline snapshot? Olhando ao redor on-line, eu vejo algumas sugestões que eu preciso usar hprof vez de jmap para fazer meus despejos de memória, mas parece que hprof gera despejos em exatamente o mesmo formato.

Esta é JDK 1.6.0_14; Eu tentei tanto no Windows e UNIX.

Foi útil?

Solução

jhat -baseline fato não funcionará com lixeiras produzidas por jmap. Eu não estou certo, mas eu acreditam isso é porque HPROF atribui à JVM desde o início e mantém a sua própria pista de objetos, permitindo que produza IDs consistentes em vários despejos. Não citar-me sobre isso. De qualquer maneira, o ponto importante na medida em que está em causa é que os despejos jmap não fazer o trabalho.

No entanto, nem tudo está perdido. Go e obter o Eclipse Memória Analyzer . (Se você não usar o Eclipse, não tenha medo, você pode obtê-lo como um executável autônomo.) É mais rápido do que jhat, usa menos memória que jhat e ele pode fazer o que quiser:

  1. Open dump2 (com Arquivo | Abrir Heap Dump). Não se preocupe em ter que criar um relatório para você.
  2. Open dump1 (o mesmo caminho). Mais uma vez, nenhum relatório.
  3. Na guia para dump2, clique em "Histograma"
  4. No lado direito da barra de ferramentas na sub-seção Histograma é "Comparar com outra heap dump". Clique nele.
  5. Selecionar dump1 do seu diálogo como o despejo para uso como linha de base.
  6. Presto, você tem as diferenças entre dump2 eo dump1 linha de base.

Tudo isso fina trabalha com um despejo jmap.

Outras dicas

Parece que você precisa usar hprof. Mas você tem certeza que você use a mesma instância VM?

A opção -baseline permite dois depósitos para ser comparado, se eles foram produzidos por hprof e a partir do mesmo exemplo VM. Se o mesmo objeto aparece em ambos os despejos ele será excluído da lista de novos objetos relatados. Um despejo é especificado como uma linha de base e a análise pode se concentrar nos objetos que são criados no segundo despejo desde a linha de base foi obtida.

Se tudo é considerado como novo, eu vou ter certeza que é a mesma instância da VM.

Aqui

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