Die Standard- Bibliotheken für die Programmiersprache Java bieten die Klasse HashMap . Eine HashMap ist eine Zuordnung von Tasten , um Werte , wo die Schlüssel und Werte zu einem bestimmten Java-Klasse angehören, können . Unter anderen Operationen , bietet HashMap eine Methode, um den Wert , der zu einem bestimmten Schlüssel zu finden und hinzuzufügen und zu löschen ( Schlüssel, Wert )-Paare aus der HashMap . HashMaps sind eine häufige Quelle von Speicherlecks Fehler in Java-Programmen : Instanzen von einigen Klasse richtig durch den Code verwaltet, sondern ein Programmierfehler verhindert, dass sie aus der HashMap gelöscht, wenn sie nicht mehr benötigt werden . Da gibt es mindestens eine hervorragende Referenz auf diese verwaisten Objekte , Java Garbage Collector kann nicht zurückfordern ihr Gedächtnis , so dass die Java Runtime läuft schließlich von Heap-Speicher . Anleitung
1
Führen Sie die Java-Anwendung mit der Profiler -Werkzeug ( HPROF ) aktiviert und Protokollierung Haufen Profile . Die genaue Art und Weise , dies zu tun , hängt vom Betriebssystem ab . Zum Beispiel auf Linux, starten Sie die Anwendung wie folgt:
java- Xrunhprof : file = mylog.txt , Haufen = Sites myApp
Replace myApp durch den Namen Ihrer Java-Anwendung. Dieser Aufruf startet die Java Virtual Machine ( JVM) in Profiling -Modus ; . JVM schreibt die Ausgabe des Profilers zu mylog.txt Datei
2
Machen Sie Ihre Bewerbung etwas Arbeitsbelastung, so dass Objekte ( in insbesondere HashMaps ) zugeordnet sind und verworfen. Machen Sie einen Schnappschuss des Haufens Zustand . Zum Beispiel auf Linux, erzeugt der Profiler eine Momentaufnahme der Haufen der Zustand , wenn Sie ausführen :
töten -3 jvmPID
mit der Prozess-ID des JVM -Instanz, die Ihre Anwendung ausgeführt wird jvmPID Ersetzen . HPROF fügt eine Momentaufnahme des Haufens zu den aktuellen Inhalt der Datei mylog.txt .
3
Machen Sie Ihre Bewerbung in etwa die gleiche Menge an Arbeitsbelastung , so dass mehr Objekte erstellt werden und Garbage Collection . Nehmen wir ein anderes Momentaufnahme der Haufen der Zustand wie in Schritt 2 .
4
Vergleichen Sie die beiden Snapshots in Schritt 2 und 3 gemacht. Insbesondere an den Grenzen zwischen " SEITEN BEGIN " und schauen " SEITEN END . " Identifizieren Sie die Klassen , deren Objekte erhöht haben am meisten in Reihe zwischen den beiden Schnappschüsse , das sind diejenigen, die für Speicherlecks, wie die Last von der Anwendung verarbeitet war annähernd konstant über die beiden Schnappschüsse
5
Untersuchen . die Snapshots zur Identifizierung der Teile des Codes Zuteilung Objekte, die nicht befreit haben , wenn nötig zu bekommen. Dafür auf die Zeilen, die mit " TRACE " , die eine " " Veranstaltung auf dem folgenden Schnappschuss Linie haben konzentrieren , für jede der Klassen in Schritt 4 identifiziert.
6 gehören die fehlende Streichungen von Verweisen auf die Problem -Klassen für die Teile des Codes in Schritt 5 identifiziert. Die Speicherlecks nicht mehr passieren.