Bevor Sie mit dieser Übung beginnen, sollten Sie Übung 1.3: Verlustkandidaten analysieren ausgeführt haben.
Jetzt wissen Sie, dass die sekundäre Warteschlange die Verluste verursacht. Lassen Sie uns im Quellcode nach dem Problem suchen.
Gehen Sie wie folgt vor, um die Quelle für die sekundäre Warteschlange zu öffnen und den Speicherverlust zu korrigieren:
public class SecondaryQueue { private Vector myQ; private int currentPos; public SecondaryQueue(){ myQ = new Vector(); currentPos=0; } public void add(Object obj){ myQ.add(obj); } public Object getNext(){ // First In/First Out // Objekt exakt einmal abrufen // currentPos protokolliert letztes entferntes Element if(myQ.size()>currentPos){ currentPos++; return myQ.get(currentPos-1); } } }
public class SecondaryQueue { private Vector myQ; private int currentPos; public SecondaryQueue(){ myQ = new Vector(); currentPos=0; } public void add(Object obj){ myQ.add(obj); } public Object getNext(){ if(myQ.size()>0){ return myQ.remove(0); } return null; } }
Wählen Sie im Hauptmenü Datei > Speichern aus, um Ihre Änderungen zu speichern.
Erstellen Sie nun erneut das Anwendungsprofil, indem Sie wie zuvor die Heap-Speicherauszüge erfassen. Wenn Sie die Verlustanalyse durchführen, sehen Sie in der Ansicht der Verlustkandidaten die Nachricht "Die Verlustanalyse hat keine Verlustkandidaten ergeben". Das Leck in der sekundären Warteschlange ist beseitigt und der Algorithmus für Verlustkandidaten hat keine weiteren Lecks gefunden.
Lesen Sie zum Abschluss dieses Lernprogramms die Informationen in der Zusammenfassung.