Ansicht
Dokumentation

ABENMEMORY_CONSUMPTION_3 - MEMORY CONSUMPTION 3

ABENMEMORY_CONSUMPTION_3 - MEMORY CONSUMPTION 3

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

Sharing zwischen dynamischen Datenobjekten

Bei der Zuweisung von Referenzvariablen werden nur die Referenzen kopiert. Nach einer Zuweisung zeigen Quell- und Zielvariable auf das gleiche Datenobjekt bzw. die gleiche Instanz einer Klasse (genauer gesagt auf deren Header).

Auch bei Zuweisungen zwischen gleichartigen Strings und zwischen gleichartigen internen Tabellen, deren Zeilentypen selbst keine Tabellentypen enthalten, findet intern ein so genanntes Sharing statt. D.h. die eigentlichen Datenwerte werden zunächst nicht kopiert. Es werden lediglich die notwendigen Verwaltungseinträge kopiert, so dass das Zielobjekt auf dieselben Daten wie das Quellobjekt verweist.

Bei Strings wird ein neue interne Referenz erzeugt, die auf den bereits vorhandenen Stringheader zeigt. Bei internen Tabellen werden eine neue interne Referenz und ein neuer Tabellenheader erzeugt, der auf den vorhandenen Tabellenkörper verweist.

Ein Sharing zwischen dynamischen Datenobjekten ist natürlich nur solange aktiv, solange mehrere dynamische Datenobjekte beteiligt sind, bzw. mehr als eine interne Referenz auf die Datenwerte verweist. Sobald nur eine interne Referenz auf die Datenwerte verweist, findet kein Sharing mehr statt. Solche Fälle treten beispielsweise auf, wenn beteiligte dynamische Datenobjekte nur während der Lebensdauer einer Prozedur vorhanden sind oder als anonyme Datenobjekte von der Garbage Collection erfasst werden.

Ein aktives Sharing zwischen vorhandenen dynamischen Datenobjekten wird genau dann aufgehoben, wenn entweder auf das Quell- oder Zielobjekt ändernd zugegriffen wird (Copy-on-write-Semantik). Dann findet der eigentliche Kopiervorgang für die Datenwerte statt und die Referenzen und Header werden entsprechend geändert.

Die folgende Abbildung veranschaulicht das Sharing dynamischer Datenobjekte. Der obere Teil zeigt auf der linken Seite das Prinzip des Sharing für Strings und auf der rechten Seite das für interne Tabellen. Der untere Teil zeigt, wie das Sharing bei einer Änderung an Quell- oder Zielobjekt aufgehoben wird.

IMAGE @@ABDOC_Sharing.gif@@567@@453@@

Hinweise

  • Tabellen-Sharing tritt prinzipiell nur bei Tabellen ein, deren Zeilentypen selbst keine Tabellentypen enthalten. Ansonsten ist die Voraussetzung "gleichartiger Tabellen" bewusst etwas offen gehalten. Zumindest Tabellen des exakt gleichen Tabellentyps, also mit gleichem Zeilentyp, gleicher Tabellenart und gleichen Schlüsseln, sind gleichartig. Daneben gibt es noch weitere Konstellationen, die als gleichartig gelten und bei denen Tabellen-Sharing eintreten kann. Es handelt sich dabei aber um eine interne Optimierung die sich auch von Release zu Release ändern kann. Es sollte also nie darauf programmiert werden, wann ein Tabellen-Sharing eintritt und wann es aufgehoben wird.
  • Bei Referenzvariablen, die auf das gleiche Datenobjekt bzw. die gleiche Instanz einer Klasse zeigen, wird das Sharing nicht durch Änderungen an den Objekten aufgehoben.





rdisp/max_wprun_time - Maximum work process run time   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4776 Date: 20240523 Time: 084740     sap01-206 ( 93 ms )