Les bibliothèques standard pour le langage de programmation Java fournissent la HashMap de classe. Une HashMap est une application de clés de valeurs, où les clés et valeurs peuvent appartenir à n'importe quelle classe de Java donnée. Parmi les autres opérations, HashMap fournit une méthode pour trouver la valeur associée à une clé donnée et d'ajouter et de supprimer ( clé, valeur ) paires de la HashMap . HashMaps sont une source fréquente d'erreurs de fuite de mémoire dans les programmes Java : les instances d'une classe sont gérées correctement par le code, mais une erreur de programmation qui les empêche d'être supprimé de la HashMap quand ils ne sont plus nécessaires . Parce qu'il ya au moins une référence exceptionnelle à ces objets orphelins , garbage collector Java ne peut pas récupérer leur mémoire , de sorte que le runtime Java finalement à court de mémoire de tas. Instructions
1
exécuter l'application Java avec l'outil profiler ( HPROF ) activée et l'enregistrement des profils de tas. La manière exacte de le faire dépend du système d'exploitation. Par exemple , sous Linux , démarrez l'application comme suit :
java- Xrunhprof : file = mylog.txt , tas = des sites myApp
Remplacer myApp par le nom de votre application Java. Cette invocation démarre la machine virtuelle Java (JVM ) en mode profilage ; . La JVM écrit la sortie du profileur de déposer mylog.txt
2
Faites votre processus de demande de certaines charges de travail, de sorte que les objets ( en particulier, HashMaps ) sont alloués et jeté. Prendre un instantané de l'état du tas . Par exemple , sous Linux , le profileur génère un instantané de l'état du tas lorsque vous exécutez :
tuer -3 jvmPID
Remplacer jvmPID avec l'identificateur de processus de l'instance JVM qui exécute votre application . HPROF ajoute un instantané du tas pour le contenu actuel du fichier mylog.txt .
3
Faites votre processus de demande à peu près la même quantité de travail ainsi que d'autres objets sont créés et ramasse-miettes . Prendre un autre cliché de l'état de la pile comme à l'étape 2.
4
comparer les deux photos prises dans les étapes 2 et 3. En particulier , regardez les lignes entre «sites BEGIN " et " END SITES . " Identifier les classes dont les objets ont le plus augmenté en nombre entre les deux clichés , ceux sont les seuls responsables de fuites de mémoire, que la charge traitée par votre application est à peu près constante sur les deux clichés
5
Examiner . les clichés d'identifier les parties du code allouer des objets qui ne reçoivent pas libérés lorsque cela est nécessaire . Pour cela, se concentrer sur les lignes commençant par «trace» qui ont un événement « " sur la ligne d'instantané , pour chacune des catégories identifiées à l'étape 4.
6 Inclure l' suppressions manquantes de références à des classes de problèmes pour les parties de votre code identifiés à l'étape 5. Les fuites de mémoire ne se produira plus .