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


image.png


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




相关文章
|
24天前
|
Rust 安全 算法
【深入探索Rust:结构体、枚举与模式匹配】A Deep Dive into Rust: Structs, Enums, and Pattern Matching
【深入探索Rust:结构体、枚举与模式匹配】A Deep Dive into Rust: Structs, Enums, and Pattern Matching
43 0
【深入探索Rust:结构体、枚举与模式匹配】A Deep Dive into Rust: Structs, Enums, and Pattern Matching
|
5月前
ABAP None-Class-Based 异常处理的一些局限性介绍试读版
ABAP None-Class-Based 异常处理的一些局限性介绍试读版
17 0
|
7月前
ABAP 编程语言里的 Reference Semantic - 引用语义
ABAP 编程语言里的 Reference Semantic - 引用语义
41 0
|
6月前
|
XML 数据格式 UED
什么是 SAP UI5 的 Semantic Object 语义对象
什么是 SAP UI5 的 Semantic Object 语义对象
43 0
|
7月前
|
存储 开发框架 自然语言处理
关于 ABAP 开发对象的原始语言版本(Original Language)
关于 ABAP 开发对象的原始语言版本(Original Language)
33 0
关于 ABAP 开发对象的原始语言版本(Original Language)
|
7月前
|
测试技术 应用服务中间件 数据库
一些 Next Generation ABAP Platform 的新语法用例
什么是 NGAP(Next Generation ABAP Platform)? SAP NetWeaver 7.40 发布,并附带其 ABAP 应用服务器 AS ABAP 7.40。 在 AS ABAP 7.40 中,ABAP 语言具有一些不错的新特性。 AS ABAP 7.40 是 AS ABAP 7.31(又名 AS ABAP 7.03)的继承者,后者是基于 AS ABAP 7.0 构建的 AS ABAP 7.02 的继承者。
42 0
|
11月前
|
C++
【C++】类的构造函数的基本介绍(A basic introduction to constructors of classes)
【C++】类的构造函数的基本介绍(A basic introduction to constructors of classes)
|
SQL 移动开发 自然语言处理
如何理解语义(semantic)化?
前端工程师的招聘中,经常有这样的要求:对Web 语义化有深刻理解。那么到底什么才是深刻理解Web语义化呢?读完这篇博客你就知道了。
如何理解语义(semantic)化?
|
C语言
SAP ABAP 编程语言里的%_c_pointer代表什么
SAP ABAP 编程语言里的%_c_pointer代表什么
113 0
SAP ABAP 编程语言里的%_c_pointer代表什么
|
安全
ABAP动态编程的性能开销 - Overhead of ABAP dynamic programming
In Mytask offline performance improvement, it is necessary to support both two DDIC structure modelled in BP and Task, that is, crmt_odata_attachment_t and crmt_bp_odata_attachment_t. It is unknown which data type will be used since they are determined by runtime according to different urls passed f
166 0
ABAP动态编程的性能开销 - Overhead of ABAP dynamic programming