什么是 ABAP 编程语言的 Used Memory 和 Allocated Memory

简介: 什么是 ABAP 编程语言的 Used Memory 和 Allocated Memory

ABAP 必须在连续的内存空间中存储 Internal Table 和字符串。


出于这个原因,ABAP 总是为这些类型对象分配比实际需要更多的存储空间。额外的存储允许高效地增长表和字符串。如果没有额外的空间,ABAP 将不得不在第一次向表中添加新行或延长字符串时,将内表或字符串复制到更大的连续内存空间。因此,ABAP 这种激进的内存分配策略,是一种典型的空间换取时间的思路。


对于字符串和内部表,Memory Inspector 会显示对象实际使用的存储空间和已分配给对象的存储空间。并且实际使用的存储空间总是小于已经分配的空间,所以下图第二列的值总是小于第一列,第四列的值总是小于第三列。

fb2962bdf26abbaf41bbd260989cd4c1.png


一个 Memory Object 的 Bound(Allocated) 区域,意思就是该 Memory Object 独占的一块内存区域。


关于 Bound Memory,这篇 ABAP 帮助文档有详细介绍。


In ABAP Memory Management, bound storage is the amount of main memory that would be released if the object that uses the storage were deleted or cleared.


如果一块内存区域 A 被对象 B 占用,并且对象 B 被清除时,区域 A 就自动被 ABAP 系统释放并回收,此时我们就说 A 是 B 的 Bound Memory.


假设类 C1 两个属性,基于 C1 创建了一个对象实例 CO_1:


  • 第一个属性是一个引用,指向当前仅由 CO_1 使用的 internal table T1.


  • 第二个属性引用另一个类 C2 的实例 CO_2。 CO_2 也由 CO_1 以独占的方式引用。


那么对象实例 CO_1 的 Bound Memory 包含哪些部分?


  • 当然包括内表 T1,因为该表由 CO_1 独占使用。 如果删除 CO_1,则 T1 也将从内存中删除。


  • Bound Memory 还包括被引用类对象实例 CO_2 占用的内存。


从 Netweaver 7.0 版开始,ABAP Memory Inspector 能正确判定类对象或匿名数据对象是仅被程序中的一个实体引用,还是被多个实体引用。


如果对象 A 具有对象 B 的独占引用,则被引用的对象 B 将视为对象 A 的 Bound Memory 的一部分。


如果对象 A 和对象 B 都具有一个指向内表 C 的引用,那么 C 不被视为 A 或者 B 的 Bound Memory 的一部分。


关于这些参数更详细的使用场合,请参考笔者这篇教程:81. 使用 SAP ABAP Memory Inspector 对应用程序消耗内存进行检测时常犯的错误。

相关文章
|
6月前
|
程序员
什么是 ABAP 编程语言里的 Exception 断点
什么是 ABAP 编程语言里的 Exception 断点
|
Shell Linux 应用服务中间件
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
|
6月前
|
数据库 开发者
什么是 ABAP 编程语言里的 sy-subrc
什么是 ABAP 编程语言里的 sy-subrc
|
Shell Linux 应用服务中间件
使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令
使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令
|
6月前
|
大数据 数据处理 云计算
道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价
道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价
|
Java 编译器 BI
关于 ABAP 这门编程语言的编译器和解释器
关于 ABAP 这门编程语言的编译器和解释器
|
SQL 数据库
使用 SAP ABAP Memory Inspector 对应用程序消耗内存进行检测时常犯的错误试读版
使用 SAP ABAP Memory Inspector 对应用程序消耗内存进行检测时常犯的错误试读版
ABAP 编程语言里的 Reference Semantic - 引用语义
ABAP 编程语言里的 Reference Semantic - 引用语义
ABAP Memory Inspector 里对动态内存对象的内存消耗度量方式
ABAP Memory Inspector 里对动态内存对象的内存消耗度量方式

热门文章

最新文章