首先说明,这个题目是个伪命题,实际上sap也会out of memory,也会挂。但由于sap管理进程和内存的机制和jvm不同,所以结果不同,不是整个系统挂。对于SAP,我们经常碰到的是“SAP的一个进程死了,需要把它杀掉”,这实际上是sap的一个dialog进程用完了extend memory,进入了priv mode,该进程就像挂了一样,而此时整个SAP系统还是可用的。
所以,为了清晰地解释着个问题,需要对sap的内存管理和进程管理有清晰的理解。
一、内存管理
概览,sap内存区域为虚拟内存,包含公用内存和私用内存。进程有自己的私用内存,公用内存是给所有进程的公共部分使用的。
1.虚拟内存
虚拟内存 = 分配给SAP的物理内存 + 在硬盘上的操作系统页面文件(基于Windows系统)或 操作系统交换空间(基于Unix或Linux系统)
更详细的图如下:
2.私用内存(Local Memory)
私用内存区是给各个独立的工作进程使用过的,包含有为工作进程(Work process)分配的私用内存(local work process memory),以及一旦扩展内存(Extended memory)耗尽后临时分配给工作进程使用的堆内存区(heap memory)