Ansicht
Dokumentation

ABENHEAP_STACK_REFERENCE - HEAP STACK REFERENCE

ABENHEAP_STACK_REFERENCE - HEAP STACK REFERENCE

Vendor Master (General Section)   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Heap- und Stack-Referenzen

Die von Referenzen referenzierten Objekte können im Heap oder im Stack liegen. Objekte im Heap sind Instanzen von Klassen oder anonyme Datenobjekte. Objekte im Stack sind die globalen Datenobjekte von Programmen und die dort gestapelten lokalen Datenobjekte von Prozeduren.

  • Heap-Referenzen zeigen auf Objekte oder Teile von Objekten im Heap
Heap-Referenzen sind Objektreferenzen oder Datenreferenzen. Sie werden entweder beim Anlegen neuer Objekte im Heap über die Anweisungen CREATE OBJECT oder CREATE DATA erzeugt oder durch Anwendung der Anweisung GET REFERENCE oder des Zusatzes REFERENCE INTO auf Datenobjekte im Heap gewonnen. Heap-Referenzen sind immer speichererhaltend. D.h. solange eine Heap-Referenz auf ein Objekt oder ein Teil eines Objekts zeigt, wird dieses nicht vom Garbage Collector gelöscht.
  • Stack-Referenzen zeigen auf Objekte oder Teile von Objekten im Stack
Stack-Referenzen sind immer Datenreferenzen und werden ausschließlich durch Anwendung der Anweisung GET REFERENCE, des Referenzierungsoperators REF oder des Zusatzes REFERENCE INTO auf Datenobjekte im Stack gewonnen. Stack-Referenzen sind nicht speichererhaltend.

Eine nicht-initiale Objektreferenz zeigt immer auf eine Instanz einer Klasse und ist damit immer eine Heap-Referenz. Eine Datenreferenz kann eine Heap- oder Stack-Referenz sein:

  • Eine Datenreferenz ist eine Heap-Referenz, wenn sie
  • auf ein Instanzattribut oder einen Teil eines Instanzattributs eines Objekts zeigt,

  • auf ein anonymes Datenobjekt oder einen Teil eines anonymen Datenobjekts zeigt.

  • Eine Datenreferenz, die auf ein Datenobjekt oder einen Teil eines Datenobjekts im Stack zeigt, ist eine Stack-Referenz.

Ein Teil eines Datenobjekts ist entweder eine Komponente einer Struktur, eine Zeile einer internen Tabelle oder ein durch Offset-/Längenangabe spezifizierter Teilbereich.

Heap-Referenzen erhalten den Speicher und können deshalb nicht ungültig werden, mit einer Ausnahme: eine Heap-Referenz auf eine Zeile einer internen Tabellen wird ungültig, wenn die Tabellenzeile gelöscht wird. Stack-Referenzen werden zusätzlich ungültig, wenn das referenzierte Datenobjekt vom Stapel verschwindet, d.h. wenn die zugehörige Prozedur beendet wird. Das letztere gilt auch für die lokalen Daten in Instanzmethoden. Für eine ungültige Referenz ist der Prädikatsausdruck IS BOUND falsch.

Hinweise

  • Für Feldsymbole gilt bezüglich Speichererhaltung und Gültigkeit das Gleiche wie für Datenreferenzen. Feldsymbole, denen Objekte oder Teile von Objekten im Heap zugewiesen sind, wirken speichererhaltend.
  • Interne Tabellen spielen als dynamische Datenobjekte dahingehend eine Sonderrolle, dass sie eine eigene Speicherverwaltung haben, die Speicher unabhängig von der Anweisung CREATE und vom Garbage Collector belegt und freigibt. Dadurch können Heap-Referenzen, die auf Zeilen interner Tabellen zeigen, ungültig werden. Bei Strings tritt dieser Fall nicht auf, da keine Referenzen auf Teilbereiche von Strings erlaubt sind.
  • Ob eine Referenz eine Heap- oder eine Stack-Referenz ist, wird allein durch ihren Wert und nicht durch den Typ der Referenzvariablen, in der sie abgelegt ist, bestimmt. Insbesondere ändern Zuweisungen zwischen Referenzvariablen nicht die diesbezüglichen Eigenschaften der kopierten Referenzen.

Die auf dem Stack liegende Heap-Referenz heap_ref zeigt auf ein anonymes Datenobjekt im Heap. Die ebenfalls auf dem Stack liegende Stack-Referenz stack_ref zeigt auf heap_ref.






ABAP Short Reference   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5898 Date: 20240523 Time: 155823     sap01-206 ( 96 ms )