SAP ABAP 的两种内存对象类型

要研究 SAP ABAP 内表的写时复制(copy on write)机制,ABAP Memory Inspector 是必不可少的工具。

ABAP Memory Inspector 能报告运行 ABAP 程序的内部会话使用的内存。

这个工具能提供下列两个维度的数据:

  1. 直接归因于 ABAP 应用程序的内存消耗。 这包括 ABAP 程序的静态和动态内存对象中的内存,以及 ABAP 堆栈上程序使用的内存。
  2. 整个内部会话针对主机操作系统的内存分配。 这包括 ABAP 内存消耗以及 ABAP 运行时和内部会话管理消耗的相对少量的内存。

SAP ABAP 的两种内存对象类型_第1张图片

Memory Inspector 总是在制作内存快照之前运行 ABAP 垃圾收集器,这样 dead 内存对象就不会对内存消耗数据的指标产生影响。

一般来说,特别是因为运行内部会话本身的开销很小,所以我们一般情况将内存分析问题的重点,聚焦在 ABAP 应用程序的内存消耗本身。毕竟作为开发人员,我们在任何情况下都只能影响 ABAP 程序的内存消耗,而不是运行时系统的内存消耗。

SAP ABAP 的两种内存对象类型_第2张图片

Dynamic and Static Memory Objects

在 ABAP 内存对象的类型中,最容易引起问题的是动态内存对象。所谓动态内存对象,是那些大小可以随着程序运行而改变的对象。 它们包括以下类型的 ABAP 实体:

  • ABAP 内表(或者更确切地说,内表中的行,即其主体)
  • 字符串
  • 类对象(由 CREATE OBJECT 语句创建的对象)
  • 匿名数据对象(由 CREATE DATA 语句创建的对象)
  • boxed Component

用于访问动态内存对象的变量包含对内部内存结构的引用,其中保存了动态内存对象的数据。 因此,动态内存对象的变量统称为引用变量

在 ABAP 中,将引用的程序实体称为“deep Component”,即必须通过评估引用来访问其内容的组件。

相比之下,静态内存对象(静态变量,在 Memory Inspector 显示中)是那些其大小在设计时由数据类型声明设置的对象。 除非程序代码本身发生变化,否则程序中此类变量所占用的内存不会发生变化。 静态变量在 ABAP 用语中也称为 flat variableflat Component.

你可能感兴趣的:(SAP ABAP 的两种内存对象类型)