乐趣区

关于sap:ABAP-编程语言里的-Reference-Semantic-引用语义

ABAP 编程语言里,对 ABAP 类实例(类对象)或匿名数据对象的多个援用,应用援用语义 (Reference Semantic) 解析。这意味着:

  • 援用单个类对象或匿名数据对象的所有变量,在内存中共享该对象的单个正本。

将这样的对象调配给变量会创立一个援用,而不是援用内存对象的独自正本。

  • 通过特定变量对类对象或匿名数据对象的更改对于援用同一对象的所有其余变量都是可见的。

与表、字符串和 boxed Component 不同,类或匿名数据对象的实例不能在增加援用和更改对象时忽然体现为独自的内存对象。

类对象和匿名数据对象没有援用计数器。因为不晓得是否存在对此类对象的任何援用,因而由 ABAP 垃圾收集器查找和删除不再被援用的内存对象。

上面是一个例子:

DATA co_1 TYPE REF TO cl_1.

DATA co_2 TYPE REF TO cl_1.

CREATE OBJECT co_1.

co_2 = co_1.

变量 CO_1 和 CO_2 当初都指向内存中的单个类对象。假如当初更改类 CL_1 的 ATTR1 的值。

co_1->attr1 = 'ABC'.

那么 co_2 的 attr1 属性也变成 ABC 了。

因为 co_1 和 co_2 实际上指向内存中同一个变量。

下图是 ABAP memory Inspector 工具的 Ranking List 的截图。假如咱们在 t1 和 t2 两个时间段,别离采集了两个内存快照。其中红色高亮区域显示的是在 t1 工夫点并不存在的变量,在 t2 工夫点新呈现的。这种类型的内表后面用 + 标识。

[20x428],20 指内表的行数,428 是每一行占据的字节数。

下图左边箭头指向的记录,最后面 没有加号,意思是这个变量在 t1 和 t2 两个工夫点都存在,只不过 t2 工夫点时内存消耗量又减少了。减少的内存消耗量,在括号内的加号前面的数值代表。

退出移动版