在 Xen VPS 中使用 Linux 3.2.0-24-virtual #37-Ubuntu SMP Wed Apr 25 12:51:49 UTC 2012 i686 i686 i386 GNU/Linux
。
在运行 Grails java 应用程序之前,运行 free -m
表示:
total used free shared buffers cached
Mem: 4031 155 3875 0 30 87
-/+ buffers/cache: 37 3994
Swap: 8191 0 8191
运行 Grails 应用程序、执行一些内存密集型处理并通过 Ctrl-C
退出后,它指示:
total used free shared buffers cached
Mem: 4031 1031 2999 0 33 957
-/+ buffers/cache: 40 3991
Swap: 8191 0 8191
在重新启动之前,这似乎不会改变。 top
和 ps aux
并不表示任何内存使用量过大。 Grails 应用程序是我在这台计算机上运行的唯一应用程序。
也许我误解了这一点,但我担心退出后内存似乎并没有被释放。通常我会怀疑内存泄漏,但是一旦 java 应用程序终止,这怎么可能呢?
最佳答案
您实际上误解了命令的输出。
Mem
行显示内核当前分配了多少内存;然而,内核会延迟释放内存。如果没有其他进程请求内存,它可能会保留分配的页面(可能是从磁盘读取的内容)。
您看到“干净”的已用/可用内存的行是 -/+ buffers/cache
行,您可以在其中看到内存使用情况大致相同。
您可以在网上找到一些更详细的解释,例如here .
关于java - 退出 java (Grails) 应用程序后, "used"内存未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190846/