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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是 ABAP 编程语言的 Used Memory 和 Allocated Memory相关的知识,希望对你有一定的参考价值。

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


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

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

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

什么是

一个 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 对应用程序消耗内存进行检测时常犯的错误​​。



以上是关于什么是 ABAP 编程语言的 Used Memory 和 Allocated Memory的主要内容,如果未能解决你的问题,请参考以下文章

abap中 结构 和 工作区有啥区别

SAP ABAP 编程问题

Sap. Abap 编程的指针怎么用?

abap语言的alv程序中,如何控制单元格的零显示空

abap 数据类型转换

一些 Next Generation ABAP Platform 的新语法用例