Introdução: Análise de Fuga de Memória

As fugas de memória, que em Java freqüentemente ocorrem quando os objetos guardam referências inapropriadamente, podem degradar o desempenho e eventualmente causar o travamento de um programa. A perspectiva Criação de Perfis e Log inclui visualizações para analisar o uso de memória do aplicativo e para detectar essas fugas.

As seguintes visualizações estão disponíveis para análise de fuga de memória:

Após identificar uma fuga, é possível utilizar Probekit para projetar probes personalizadas para investigar objetos específicos que podem estar causando fuga.

Para identificar rapidamente os candidatos à fuga, execute a análise de fuga de memória gerenciando um perfil com um conjunto de criação de perfis da Análise de Fuga de Memória. Também é possível examinar o uso de memória gerenciando um perfil com o conjunto de criação de perfis de Análise de Memória; é possível navegar por esses dados com as visualizações Gráfico de Referência do Objeto, Referências do Objeto e Detalhes do Objeto, mas não é possível utilizar os dados para gerar uma lista de candidatos à fuga.

Tópico pai: Introdução à Determinação de Problemas de Tempo de Execução

Executando a Análise de Fuga de Memória

A análise de fuga de memória utiliza algoritmos avançados para identificar potenciais fugas de memória com base em uma comparação de dois dumps de heap. É possível definir uma configuração de criação de perfil para permitir a captura de dumps de heap manualmente ou automaticamente em horários especificados no seu conjunto de criação de perfil.

Pré-requisitos:

Para analisar fugas:

  1. Na guia Criação de Perfil da caixa de diálogo Perfil, selecione Análise de Fuga de Memória - Dumps de heap manuais ou o conjunto de Criação de Perfil Análise de Fuga de Memória - Dumps de heap temporizados.
  2. Clique em Perfil para iniciar o aplicativo. A visualização Candidatos à Fuga é aberta e exibe informações de status para a execução da criação de perfil.
  3. Se você estiver capturando dumps de heap manuais, faça o seguinte:
    1. Aqueça seu aplicativo: Utilize o aplicativo até que tudo que deveria estar na memória esteja na memória. Execute as transações que você deseja investigar várias vezes.
    2. Capture o primeiro dump de heap clicando no botão Capturar Dump de Heap Botão Capturar dump de heap na visualização Candidatos à Fuga. O dump de heap é incluído no Monitor de Criação de Perfis como um recurso de criação de perfil.
    3. Execute as transações que deseja investigar várias vezes.
    4. Capture um segundo dump de heap. Você pode agora finalizar seu aplicativo.
  4. Se você estiver capturando dumps de heap cronometrados, permita que seu aplicativo seja executado até que a visualização Candidatos à Fuga indique que ambos os dumps de heap foram capturados e que é possível iniciar a análise. Por padrão, o primeiro dump de heap é capturado depois de 10 minutos (600 segundos) e o segundo é capturado depois de 10 minutos adicionais. Você pode agora finalizar seu aplicativo.
  5. Na visualização Candidatos à Fuga, clique no botão Analisar por Fugas Botão Analisar por fugas.
  6. Na caixa de diálogo Selecionar Opções de Análise de Fuga, clique em OK. Quando a análise for concluída, a visualização Candidatos à Fuga lista os objetos no heap que ainda estavam mantendo referências a objetos no momento do segundo dump de heap, com os objetos que mais provavelmente estão com fuga de memória listados em primeiro lugar.
  7. Dê um clique duplo no candidato à fuga mais suscetível para exibi-lo na visualização Gráfico de Referência do Objeto. O gráfico realça o caminho entre a raiz da fuga (o objeto que está mantendo as referências) e o objeto que possivelmente causou a fuga; isso permite navegar pelo gráfico. É possível exibir informações estatísticas sobre qualquer objeto ou segmento de caminho, pausando o cursor sobre ele. Desta forma, é possível investigar quanta memória está sendo mantida e considerar se é possível remover alguma das referências.
  8. Dê um clique duplo em um objeto na visualização Gráfico de Referência do Objeto para exibir informações sobre o objeto na visualização Detalhes do Objeto. Essa visualização exibe todas as informações sobre o objeto atual em formato de tabela, incluindo dados adicionais sobre os referenciadores do objeto (objetos que se referem ao objeto atual) e referenciados (objetos aos quais o objeto atual se refere).

Agora é possível modificar o código para limpar as referências que não mais sejam úteis, para que o coletor de lixo possa coletar objetos desnecessários. Gere um perfil de seu aplicativo novamente para verificar se a fuga foi corrigida e para detectar fugas adicionais.

Para obter informações adicionais, leia Analisando Fugas de Memória.

Investigando o Uso da Memória com a Análise de Memória

O conjunto de criação de perfis da Análise de Memória, com o tipo de criação de perfis da Análise de Memória/Fuga, permite que você colete as referências de objeto e visualize dumps de heap. Note que esses dados podem ser visualizados nas visualizações Gráfico de Referência do Objeto, Referências do Objeto e Detalhes do Objeto, mas não é possível utilizá-los para gerar uma lista de candidatos à fuga.

Para investigar o uso de memória:

  1. Na guia Criação de Perfis da caixa de diálogo Perfil, selecione o conjunto de criação de perfis Análise de Memória. Observe que este conjunto de criação de perfis não identifica os candidatos à fuga automaticamente.
  2. Clique em Perfil para iniciar o aplicativo.
  3. Execute as partes de seu aplicativo que você deseja analisar.
  4. No Monitor de Criação de Perfis, clique com o botão direito do mouse no recurso de criação de perfis do agente e selecione Coletar Referências do Objeto no menu pop-up. Você pode agora finalizar o programa. Um recurso de criação de perfis com os dados coletados para a execução é exibido no Monitor de Criação de Perfis.
  5. Para exibir as referências do objeto, clique com o botão direito do mouse no recurso de criação de perfis e, no menu pop-up, selecione Abrir Com..., seguido pelo nome da visualização que deseja exibir.
Termos de Uso | Feedback
(C) Copyright IBM Corporation 2000, 2004. Todos os direitos reservados.