【发布时间】:2012-08-16 13:22:51
【问题描述】:
我在各种操作系统中遇到内存管理问题。
我的程序是一个服务器,它执行一些可能需要几 GB 内存的处理。之后,它会释放大部分内存,同时等待几个小时,直到另一个请求到达。
在 AIX 和 Solaris 上,我观察到以下行为,
当我释放内存时,内存不会返回给操作系统。进程使用的虚拟内存量总是增加 - 永远不会减少。物理内存也是如此,直到它的极限。因此,我们似乎也在睡眠模式下使用了所有这些内存。
这块内存什么时候可以返回给操作系统?我怎样才能做到?
Linux 不同:它似乎有时会返回内存,但我无法理解何时以及如何。例如,我有一个场景,请求之前的进程是 100MB,然后是峰值 700MB,而在释放所有请求之后它下降到 600MB。我不明白——如果 Linux 将内存归还给操作系统,为什么不全部归还呢?
【问题讨论】:
-
我看到 Java 12 现在承诺在某些情况下能够将内存返回给操作系统 - openjdk.java.net/jeps/346
标签: linux unix memory aix sbrk