As bibliotecas padrão para a linguagem de programação Java fornecer o HashMap classe. Um HashMap é um mapeamento de chaves para valores, onde as chaves e valores podem pertencer a qualquer classe Java. Entre outras operações , HashMap fornece um método para encontrar o valor associado a uma determinada chave e adicionar e excluir ( chave, valor ) pares do HashMap. HashMaps são uma fonte comum de erros de vazamento de memória em programas em Java : as instâncias de alguma classe são gerenciados corretamente pelo código, mas um erro de programação impede que eles sejam excluídos do HashMap quando eles não são mais necessários . Porque há pelo menos uma referência excelente para aqueles objetos órfãos , coletor de lixo do Java não pode recuperar sua memória, de modo que o tempo de execução Java , eventualmente, ficar sem memória heap. Instruções
1
Execute o aplicativo Java com a ferramenta profiler ( hprof ) ativado e perfis heap madeireiras. A forma exacta de fazer isso depende do sistema operativo . Por exemplo, no Linux , inicie o aplicativo da seguinte forma:
java- Xrunhprof : arquivo = MyLog.txt , montão = locais myApp
Substituir myApp pelo nome do seu aplicativo Java. Esta invocação inicia a máquina virtual Java (JVM) em modo de perfil ; . JVM grava a saída do profiler para arquivar MyLog.txt
2
Faça o seu processo de candidatura alguma carga de trabalho, para que os objetos (em em particular , HashMaps ) são atribuídos e descartado . Tome um instantâneo do estado heap. Por exemplo, no Linux , o profiler gera um instantâneo do estado do monte quando você executa :
matar -3 jvmPID
Substituir jvmPID com o identificador do processo da instância de JVM que está executando o aplicativo . Hprof acrescenta um instantâneo da pilha para o conteúdo atual do arquivo MyLog.txt .
3
Faça o seu processo de aplicação mais ou menos a mesma quantidade de carga de trabalho para que mais objetos são criados e lixo recolhidas . Tome um outro instantâneo do estado do heap como na Etapa 2.
4
Compare as duas fotografias tiradas nos Passos 2 e 3 . Em particular, olhar para as linhas entre " SITES BEGIN " e " SITES fim. " Identificar as classes cujos objetos têm aumentado mais em número entre as duas imagens , esses são os responsáveis por vazamentos de memória , como a carga processada pelo seu aplicativo foi mais ou menos constante ao longo dos dois instantâneos
5
Examine . os instantâneos para identificar as partes dos objetos de código alocação que não são liberados quando necessário . Para isso, concentrar-se nas linhas que começam com " TRACE " que têm um evento " " na seguinte linha de snapshot , para cada uma das classes identificadas no Passo 4.
6 Incluir o faltando exclusões de referências para as classes de problemas para as partes de seu código identificados na Etapa 5. Os vazamentos de memória não mais acontecer.