Pergunta

Como o vazamento de memória em aplicativos Eclipse RCP detectado?

Foi útil?

Solução

Você pode querer experimentar o detector de vazamento de memória que vem com JRockit Mission Controlo juntamente com Eclipse MAT . É uma combinação poderosa. Ambas as ferramentas são livres para usar para o desenvolvimento.

Com JRockit Mission Control você pode inspecionar a pilha de linha e ver os objetos número exato de um determinado tipo que são ao vivo, sem a necessidade de ter demorado instantâneos. Você pode ver diretamente se você tem um Editor, Vista ou objeto ouvinte deixado na pilha depois que você fechou a Ver / Editor. É geralmente um ouvinte estrutura que detém sobre a sua visão / editor. Lembre-se, você deve ir para Windows-> Preferências-> Vazamento de memória Detector-> Tendência e set O mais baixo uso de heap de relatório para 0,0 a si todas as instâncias de objetos.

text alt
(fonte: oracle.com )

Com MAT então você pode usar o caminho mais curto para a raiz da rosca de encontrar a cadeia que está segurando o objeto vazando. Veja abaixo

alt texto http://dev.eclipse.org /blogs/memoryanalyzer/files/2008/04/path2gc_all.png

Modificar seu código e verificar com o detector de vazamento de memória que o objeto é lixo coletado quando você fechar o editor / view.

Outras dicas

Você precisa de algum tipo de ferramenta de perfil.

Não é projeto um href="http://www.eclipse.org/mat/" rel="nofollow noreferrer"> Memória Analyzer no eclipse ( wiki , blogue ).

Além disso, parece que TPTP também não profiling.

A solução mais simples vem com Java JDK:. Java VisualVM

Ele está localizado no diretório bin (jvisualvm.exe sob Windows) desde JDK 6 Update 7.

Também inclui um perfil de memória, um montão walker e um Eclipse integração .

https://visualvm.dev.java.net /images/getstarted/vvm-anagram-profiler.png (muito ruim, eu não estou autorizado a tags de imagem uso)

Consulte https://visualvm.dev.java.net/

Se você estiver no Windows a maneira mais simples é simplesmente monitorar o exemplo processo eclipse.exe no Gerenciador de tarefas ao usar a ferramenta. Se o seu executável RCP tem um nome diferente, então é isso que você vai precisar para monitorar. No Unix, você pode usar uma ferramenta análoga (proc talvez?).

Execute as tarefas mais intensivas disponível (ou se você suspeitar que certas funções causa o problema, use os). Se a quantidade de memória utilizada pelo eclipse.exe sobe não, eventualmente, diminuir após suas tarefas intensivas ter concluído, então você provavelmente tem um vazamento. Isto acabará por causar um erro de falta de memória.

Você pode acelerar um erro de falta de memória, reduzindo a quantidade de memória disponível para a aplicação através do "-Xmx" configuração no eclipse.ini (ou ini). Por exemplo. meios -Xmx256m um máximo de 256 megabytes está disponível. Obviamente, esta definição ainda precisa ser suficiente para executar seu aplicativo, mas uma configuração mais baixa vai forçar a coleta de lixo mais frequentes e vazamentos de fazer mais aparente.

Você precisa de um profiler de memória (como os outros). Uma vez que você tem uma boa ferramenta, você pode encontrar os problemas com bastante facilidade.

Nós usamos: http://www.yourkit.com/

para os nossos testes, ele funciona muito bem, tem licenças flutuantes tão devs pode usá-lo localmente em suas máquinas.

Basicamente, você tirar um instantâneo das acções que está a tomar e depois olhar para os itens que foram alocados e não divulgados.

Edit:. Eu esqueci de acrescentar, integra esta ferramenta para a direita em eclipse

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