
Übersichten über Speicherverbräuche
Durch Wahl des Menüs wird ein Tabstrip mit folgenden Reitern angezeigt:
Speicherverbrauch - gesamt
Speicherverbrauch - Rangliste
Speicherverbrauch - SZK (Starke Zusammenhangskomponenten)
Neben der direkten Anzeige des Speicherverbrauchs im Debugger mit der Funktion Speicherverbrauch bietet die Speicheranalyse die Möglichkeit, Speicherabzüge abzuspeichern und mit dem Memory Inspector zu analysieren.
Speicherverbrauchsanzeigen
Speicherverbrauch - gesamt
Der Speicherverbrauch folgender Speicherbereiche wird in Bytes angezeigt (siehe Virtueller Adressraum eines Workprozesses):
Heap-Speicher (privater Speicher)
Benutzter Speicher (im Roll- oder Heap-Speicher mit Daten belegter Speicher)
Bereits allokierter Speicher (im Roll- oder Heap-Speicher bereits angeforderter Speicher)
Short-Speicher (Speicher für Zwischenergebnisse, zum Beispiel aus dem Dynpro, der automatisch nach jedem Dialogschritt abgeräumt wird.)
Speicherverbrauch - Rangliste
Im Standard wird eine Liste aller verwendeten Datenobjekte angezeigt, sortiert nach gebundenem Speicher, die automatisch aktualisiert wird.
Speicherverbrauch - SZK
Alle dynamischen Objekte (interne Tabellen, Strings, mit CREATE OBJECT erzeugte Objekte, mit CREATE DATA erzeugte anonyme Datenobjekte) eines internen Modus bilden die Knoten eines gerichteten Graphen, dessen Kanten die dazugehörigen Referenzen sind. Für die Analyse des Graphen ist es wichtig, die starken Zusammenhangskomponenten (Abkürzung SZK) zu kennen. Eine SZK ist durch folgende Eigenschaft charakterisiert: Für je zwei Elemente A und B einer SZK existiert ein Pfad im Objektgraph von A nach B und von B nach A. Ein Pfad besteht immer aus mehreren zusammenhängenden Kanten.
Es wird eine Rangliste des Speicherverbrauchs aller SZK des aktuellen internen Modus angezeigt, wobei die Sortierung wahlweise nach referenziertem oder gebundenem Speicher erfolgt. Die Liste umfasst nur diejenigen SZK, die aus mindestens zwei Elementen bestehen.
Bedeutung der Spalten für Einzelanzeigen, Ranglisten und SZK
Gebundener Speicher
Speicher, der beim vollständigen Löschen (bei internen Tabellen mit FREE) frei wird. Zum angegebenen Objekt wird auch der Speicher derjenigen Objekte gezählt, die exklusiv durch das vorliegende Objekt über Referenzen am Leben gehalten werden. Enthält z.B. eine interne Tabelle Referenzen auf Datenobjekte exklusiv und können diese nach dem Löschen der internen Tabelle vom Garbage-Collector freigegeben werden, so tragen die so referenzierten Objekte mit zum Gebundenen Speicher bei.
Referenzierter Speicher
Speicher, auf den das Datenobjekt verweist (eventuell über andere Datenobjekte hinweg). Dieser Speicher wird beim Löschen des Datenobjekts nicht unbedingt freigegeben, da noch andere Datenobjekte auf den Speicher verweisen können. Der referenzierte Speicher ist immer größer oder gleich dem gebundenen Speicher.
Benutzter Speicher
Speicher, der mit Nutzdaten belegt ist.
Allokierter Speicher
Speicher, der vom System reserviert wurde. Der allokierte Speicher ist immer größer oder gleich dem benutzten Speicher.
Anzahl Instanzen
Diese Spalte erscheint bei Ranglisten nur nach einer Gruppierung und bei SZK. Sie gibt die Anzahl der Instanzen einer Klasse, eines Datentyps oder der Elemente einer SZK an.
Sharing
Diese Spalte betrifft nur interne Tabellen und Strings. Sie ist markiert, falls für diese nach Zuweisungen Sharing aktiv ist.
SZK-Markierung
Falls eine interne Tabelle, ein Objekt oder ein anonymes Datenobjekt Teil einer SZK ist, erscheint in der Spalte rechts eine Drucktaste, deren Auswahl die entsprechende SZK anzeigt.
Zusatzfunktionen für Ranglisten und SZK
Einstellungen
Durch Betätigung der Ikone Einstellungen ändern wird ein Fenster angezeigt, in dem die Sortierreihenfolge (nach gebundenem oder referenzierten Speicher), das Aktualisierungsverfahren (automatisch oder manuell) und die Zahl der Einträge ausgewählt werden können. Für die Rangliste des Speicherverbrauchs kann zuätzlich die Art der Datenobjekte, deren Speicherverbrauch angezeigt wird, ausgewählt werden. Ferner können Objekte und anonyme (mit CREATE DATA erzeugte) Datenobjekte in der Rangliste nach ihren Klassen oder Datentypen gruppiert werden. Hierbei wird der Speicherbedarf der einzelnen Objekte und einmalig der statische Speicher der Klasse zusammengezählt. Diese Funktion ist dann sinnvoll, falls es zu einer Klasse oder einem Datentyp sehr viele Instanzen mit jeweils geringem Speicherbedarf gibt.
Instanz-Liste
Diese Funktion steht bei Ranglisten nur nach einer Gruppierung zur Verfügung. Durch Betätigung der Ikone Instanz-Liste werden alle Instanzen einer Klasse, eines Datentyps oder alle Elemente einer SZK aufgelistet.
Referenzen finden
Durch Betätigung der Ikone Referenzen finden werden alle Referenzen auf ein Objekt, ein anonymes Datenobjekt, einen String, eine interne Tabelle oder eine SZK angezeigt. Insbesondere werden bei Strings und internen Tabellen, für die nach Zuweisungen Sharing aktiv ist, alle Variablen angezeigt, über die der gemeinsame Datenbereich adressiert wird. Dazu gehören auch Variable anderer ABAP-Programme, des gleichen internen Modus, die auf über DATA ... COMMON PART deklarierte Strings und interne Tabellen zugreifen.
Sichern als lokale Datei
Diese Funktion steht nur bei Ranglisten zur Verfügung. Mit ihr kann ein wählbarer Ausschnitt der Rangliste im Excel-Format in eine lokale Datei auf dem Präsentationsserver gespeichert werden.
Speicheranzeige für einzelne Objekte und Datenobjekte
Durch Wahl des Menüs wird die Speicheranzeige für einzelne Objekte und Datenobjekte eingeschaltet. Die aktuellen Speicherwerte werden in der Einzelanzeige des jeweiligen Objektes oder Datenobjektes angezeigt. Durch Betätigung der Ikone Referenzen finden werden alle Referenzen auf ein Objekt, ein anonymes Datenobjekt, einen String oder eine interne Tabelle angezeigt. Falls eine interne Tabelle, ein Objekt oder ein anonymes Datenobjekt Teil einer SZK ist, erscheint eine Drucktaste, deren Auswahl die entsprechende SZK anzeigt.
Für interne Tabellen und Strings ist Sharing möglich. Das Sharing wird systemintern über einen Referenzzähler abgebildet. Wenn dieser Zähler den Wert 1 enthält, so ist für die interne Tabelle oder den String kein Sharing aktiv. In diesem Fall wird der Speicherverbrauch dem Knoten zugeschlagen, der diese interne Tabelle oder den String referiert, das heißt, dass die Größe der internen Tabelle oder des Strings im gebundenen Speicher des übergeordneten Knotens enthalten ist.