SAP ABAP 的两种内存对象类型

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

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

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

  1. 直接归因于 ABAP 应用程序的内存消耗。 这包括 ABAP 程序的静态和动态内存对象中的内存,以及 ABAP 堆栈上程序使用的内存。

  2. 整个内部会话针对主机操作系统的内存分配。 这包括 ABAP 内存消耗以及 ABAP 运行时和内部会话管理消耗的相对少量的内存。

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

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

Dynamic and Static Memory Objects

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

  • ABAP 内表(或者更确切地说,内表中的行,即其主体)

    扫描二维码关注公众号,回复: 14387774 查看本文章
  • 字符串

  • 类对象(由 CREATE OBJECT 语句创建的对象)

  • 匿名数据对象(由 CREATE DATA 语句创建的对象)

  • boxed Component

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

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

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

猜你喜欢

转载自blog.csdn.net/i042416/article/details/125474587
今日推荐