ABAP Memory Inspector 报告运行 ABAP 程序的 Internal Session 使用的内存。
这个工具可以给 ABAP 开发人员揭示以下信息:
- 直接归因于 ABAP 应用程序的内存消耗。 这包括 ABAP 程序的静态和动态内存对象中的内存,以及程序在 ABAP 堆栈上使用的内存。
- 整个内部会话针对主机操作系统的内存分配。 这包括 ABAP 内存消耗以及 ABAP 运行时(ABAP Runtime)和内部会话管理消耗的相对较小的内存量。
内存检查器总是在拍摄快照之前运行 ABAP 垃圾收集器,这样 dead 内存对象就不会干扰 ABAP Memory Inspector 采集的内存消耗数据。
换言之,在使用 ABAP Memory Inspector 之前,不需要显式调用 CL_ABAP_MEMORY_UTILITIES 的 DO_GARBAGE_COLLECTION 方法:
也不需要在调试器里,显式使用 Start Garbage Collector
进行内存回收:
一般而言,尤其是因为运行内部会话的开销很小,所以在分析内存问题时只有 ABAP 应用程序的内存才是重要的。 作为开发人员,我们在任何情况下都只能影响 ABAP 程序的内存消耗,而不能影响运行时系统的内存消耗。
在 ABAP 内存对象的类型中,最有可能导致问题的是动态内存对象。 动态内存对象是那些大小可以随着程序运行而改变的对象。 它们包括以下类型的 ABAP 实体:
- 内部表(或者更确切地说,内部表中的行,它的主体)
- 字符串
- 类对象(由 CREATE OBJECT 语句创建的对象)
- 匿名数据对象(由 CREATE DATA 语句创建的对象)
- Boxed Component
用于访问动态内存对象的变量包含对内部内存结构的引用,其中保存了动态内存对象的数据。 因此,动态内存对象的变量统称为引用变量。
在 ABAP 中,我们通常将引用的程序实体称为 deep Component,这是一种其内容必须通过引用的 evaluation 来访问的组件。