ABAP 编程语言里的 Reference Semantic - 引用语义

简介: 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 是每一行占据的字节数。


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

fb293b3a1ffcb1ba526a304df73f2296.png

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

相关文章
|
2月前
|
程序员
什么是 ABAP 编程语言里的 Exception 断点
什么是 ABAP 编程语言里的 Exception 断点
|
10月前
|
Shell Linux 应用服务中间件
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
|
2月前
|
数据库 开发者
什么是 ABAP 编程语言里的 sy-subrc
什么是 ABAP 编程语言里的 sy-subrc
|
2月前
|
大数据 数据处理 云计算
道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价
道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价
|
10月前
|
Shell Linux 应用服务中间件
使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令
使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令
|
9月前
|
大数据 测试技术
关于 ABAP 函数调用 Pass by value 和 Pass by reference 的性能比较
关于 ABAP 函数调用 Pass by value 和 Pass by reference 的性能比较
|
9月前
|
BI 数据库
关于 ABAP Flight Reference Scenario
关于 ABAP Flight Reference Scenario
使用 ABAP 代码打印 SAP 系统指定订单的 Reference Currency 字段
使用 ABAP 代码打印 SAP 系统指定订单的 Reference Currency 字段
|
9月前
|
Java 编译器 BI
关于 ABAP 这门编程语言的编译器和解释器
关于 ABAP 这门编程语言的编译器和解释器
|
10月前
SAP ABAP 方法调用里传值(Pass Value)和传引用(Pass Reference)的区别试读版
SAP ABAP 方法调用里传值(Pass Value)和传引用(Pass Reference)的区别试读版