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

As fugas de memória, que no Java normalmente resultam quando objetos mantêm referências inapropriadamente, podem degradar o desempenho e eventualmente causar o travamento de um programa. A perspectiva Profiling and Logging (Traçado de Perfil e Log) inclui visualizações para analisar o uso de memória em um aplicativo e para detectar essas fugas.

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

Depois de identificar uma fuga, é possível utilizar o Probekit para projetar probes personalizados para investigar objetos específicos que podem estar com fuga.

Para identificar rapidamente os candidatos à fuga, execute a análise de fuga de memória com um conjunto de traçado de perfil Memory Leak Analysis (Análise de Fuga de Memória). Também é possível examinar o uso de memória com o conjunto de traçado de perfil Memory Analysis (Análise de Memória); você pode procurar esses dados com as visualizações Object Reference Graph (Gráfico de Referência do Objeto), Object References (Referências do Objeto) e Object Details (Detalhes do Objeto), mas não é possível utilizar os dados para gerar uma lista de candidatos à fuga.

Executando a Análise da Fuga de Memória

A análise de fuga de memória utiliza algoritmos avançados para identificar fugas de memória potenciais com base na comparação de dois dumps de heap. É possível definir uma configuração de traçado de perfil para permitir a captura manual de dumps de heap ou a captura automática de dumps de heap nos momentos especificados no conjunto de traçado de perfil.

Pré-requisitos:

Para analisar fugas:

  1. Na guia Profiling (Traçado de Perfil) da caixa de diálogo Profile (Perfil), selecione o conjunto de traçado de perfil Memory Leak Analysis - Manual heap dumps (Análise de Fuga de Memória - Dumps de heap manuais) ou Memory Leak Analysis - Timed heap dumps (Análise de Fuga de Memória - Dumps de heap cronometrados).
  2. Clique em Profile (Perfil) para iniciar seu aplicativo. A visualização Leak Candidates (Candidatos à Fuga) é aberta e exibe informações de status para a execução do traçado de perfil.
  3. Se estiver capturando dumps de heap manuais, faça o seguinte:
    1. Aqueça seu aplicativo: Utilize o aplicativo até que tudo o que deveria estar em memória assim esteja. Execute as transações que deseja investigar várias vezes.
    2. Capture o primeiro dump do heap clicando no botão Capture Heap Dump (Capturar Dump do Heap) Botão Capture heap dump na visualização Leak Candidates. O dump do heap é incluído no Profiling Monitor (Monitor de Traçado de Perfil) como um recurso de traçado de perfil.
    3. Execute as transações que deseja investigar várias vezes mais.
    4. Capture um segundo dump do heap. Agora é possível finalizar seu aplicativo.
  4. Se estiver capturando dumps de heap cronometrados, permita que seu aplicativo seja executado até que a visualização Leak Candidates (Candidatos à Fuga) indicar que os dois dumps de heap foram capturados e que é possível iniciar a análise. Por padrão, o primeiro dump do heap é capturado após 10 minutos (600 segundos) e o segundo é capturado depois de 10 minutos adicionais. Agora é possível finalizar seu aplicativo.
  5. Na visualização Leak Candidates (Candidatos à Fuga), clique no botão Analyze for Leaks (Analisar por Fugas) Botão Analyze for leaks.
  6. Na caixa de diálogo Select Leak Analysis Options (Selecionar Opções de Análise de Fuga), clique em OK. Quando a análise for concluída, a visualização Leak Candidates (Candidatos à Fuga) listará objetos no heap que ainda estavam mantendo referências a objetos no momento do segundo dump do heap, com os objetos com maior probabilidade de fuga de memória listados em primeiro lugar.
  7. Dê um clique duplo no candidato à fuga com maior probabilidade para exibi-lo na visualização Object Reference Graph (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 potencialmente em fuga; isso permite navegar pelo gráfico. É possível exibir informações estatísticas sobre qualquer objeto ou segmento de caminho pausando-se o cursor sobre ele. Dessa forma, é possível investigar a quantidade de memória que está sendo retida e considerar se é possível remover alguma das referências.
  8. Dê um clique duplo em um objeto na visualização Object Reference Graph (Gráfico de Referência do Objeto) para exibir informações do objeto na visualização Object Details (Detalhes do Objeto). Essa visualização exibe todas as informações sobre o objeto atual em formato tabular, 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 excluir as referências que não mais são úteis, de forma que o coletor de lixo possa coletar objetos desnecessários. Trace novamente o perfil de seu aplicativo para verificar se a fuga foi corrigida e detectar fugas adicionais.

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

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

O conjunto de traçado de perfil Memory Analysis (Análise de Memória), com o tipo de traçado de perfil Basic Memory Analysis (Análise Básica de Memória), permite coletar referências do objeto e visualizar dumps de heap. Note que é possível visualizar esses dados nas visualizações Object Reference Graph (Gráfico de Referência do Objeto), Object References (Referências do Objeto) e Object Details (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 Profiling da caixa de diálogo Profile, selecione o conjunto de traçado de perfil Memory Analysis (Análise de Memória). Note que esse conjunto de traçado de perfil não identifica automaticamente os candidatos à fuga.
  2. Clique em Profile (Perfil) para iniciar seu aplicativo.
  3. Exercite as partes de seu aplicativo que deseja analisar.
  4. No Profiling Monitor, clique com o botão direito do mouse no recurso de traçado de perfil do agente e clique em Collect Object References (Coletar Referências do Objeto). Agora é possível finalizar seu programa. Um recurso de traçado de perfil com os dados coletados para a execução aparece no Profiling Monitor.
  5. Para exibir as referências do objeto, clique com o botão direito do mouse no recurso de traçado de perfil e, em seguida, clique em Open With (Abrir com), seguido pelo nome da visualização que deseja exibir.
Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.