Speicherverluste identifizieren

Voraussetzungen:

Ein Speicherleck ist ein Fehler in der dynamischen Speicherzuordnungslogik eines Programms, der das Zurückfordern von verworfenen Speicherbereichen verhindert. Objekte, die nicht länger benötigt werden, werden also nicht zurückgefordert. Eine unerwartet hohe Zahl solcher Instanzen kann zu einem Speicherleck führen. Ein schwer wiegendes Speicherleck kann dazu führen, dass eine Anwendung zusammenbricht, weil ihr nicht mehr genügend Speicher zur Verfügung steht.

Speicherlecks werden von Objekten verursacht, die Verweise auf andere Objekte nicht freigeben und dadurch verhindern, dass in der Garbage-Collection diese gehaltenen Objekte zurückgefordert werden können.  Die Tabelle 'Objektverweise' dient dazu, solche Verweise zu identifizieren.

Speicherverluste in einer Anwendung finden

Um einen Speicherverlust in Ihrer Anwendung zu ermitteln, gehen Sie wie folgt vor:

  1. Wählen Sie in der Perspektive 'Profilermittlung und Protokollierung' entweder die Überwachung oder den Agenten in der Sicht 'Profilermittlung - Überwachung' aus.  
  2. Klicken Sie mit der rechten Maustaste entweder auf die Überwachung oder auf den Agenten, und wählen Sie Objektverweise erfassen aus. Objektverweise werden jetzt erfasst.
  3. Klicken Sie erneut mit der rechten Maustaste, und wählen Sie Öffnen mit > Objektverweis aus.  Die Tabelle 'Objektverweise' wird geöffnet.
  4. Wählen Sie das Symbol des lokalen Menüs  Eine Schaltfläche mit Dreieckssymbol aus und wählen Sie anschließend Anzeigen: Verweis auf aus.
  5. Prüfen Sie die Liste der Objekte und deren Verweise. Die Objekte mit Verweisen stellen ein potenzielles Speicherleckproblem dar. 

Speicherlecks in einer transaktionsorientierten Operation finden

Diese Prozedur kann Ihnen dabei helfen, eine Phase in Ihrer Anwendung zu finden, in der neue Objekte erstellt, aber nicht wieder freigegeben werden. Dies hat zur Folge, dass diese Objekte nicht mehr von der Garbage-Collection entfernt werden können. Beispielsweise erstellt Ihr Programm ein Dialogfenster, aber die in diesem Dialog verwendeten Objekte werden auch nach dem Schließen des Fensters weiterhin gehalten.  Um einen Speicherverlust in einer transaktionsorientierten Operation zu identifizieren, gehen Sie wie folgt vor:

  1. Wählen Sie in der Perspektive 'Profilermittlung und Protokollierung' entweder die Überwachung oder den Agenten in der Sicht 'Profilermittlung - Überwachung' aus.  
  2. Erfassen Sie die Objektverweise vor die betreffende Operation ausgeführt wird. Klicken Sie die rechte Maustaste an und wählen Sie Objektverweise erfassen aus. Objektverweise werden jetzt erfasst.
  3. Klicken Sie die Überwachung mit der rechten Maustaste an und wählen Sie Öffnen mit > Objektverweis aus. Untersuchen Sie die Tabelle 'Objektverweise' und notieren Sie die erstellten Objektverweise.
  4. Führen Sie die Operation aus, die Sie untersuchen wollen.
  5. Erfassen Sie die Objektverweise nach Abschluss der Operation. Klicken Sie die rechte Maustaste an und wählen Sie nochmals Objektverweise erfassen aus.
  6. Klicken Sie die Überwachung mit der rechten Maustaste an und wählen Sie Öffnen mit > Objektverweis aus. Untersuchen Sie die Tabelle 'Objektverweise' und notieren Sie die erstellten Objektverweise.
  7. Um die Verweise eines bestimmten Objekts zu untersuchen, gehen Sie wie folgt vor:
    1. Wählen Sie im Kontextmenü in der Tabelle 'Objektverweise' die Option Anzeigen: Verweis durch aus.
    2. Wählen Sie die gewünschte Objektklasse aus, und erweitern Sie den Eintrag.
    3. Finden Sie die Verweise, die das Zurückfordern der neuen Objekte verhindern.

 

Zugehörige Konzepte
Übersicht über Profilermittlungstool
Profilermittlungsressourcen
Objektverweistabelle

Zugehörige Tasks
Anwendungsprofil erstellen
Einen Java-Prozess starten oder anhängen