乐趣区

关于sap:什么是-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 对应用程序耗费内存进行检测时常犯的谬误。

退出移动版