退出java(Grails)应用程序后,“使用”内存不会释放

时间:2012-08-30 06:10:49

标签: java grails memory ubuntu xen

在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

在重启之前似乎没有改变。 topps aux并未表示任何繁重的内存使用情况。 Grails应用程序是我在这台机器上运行的唯一应用程序。

也许我误解了这一点,但我担心记忆似乎不会在退出后释放。通常我怀疑内存泄漏,但是一旦java应用程序被终止,这怎么可能呢?

1 个答案:

答案 0 :(得分:2)

您实际上是误解了命令的输出。

Mem行显示内核当前分配的内存量;但是,内核懒洋洋地释放内存。如果没有其他进程请求内存,它可能会保留已分配的页面(可能是从磁盘读取的内容)。

您看到“干净”使用/可用内存的行是-/+ buffers/cache行,您可以在其中看到您的内存使用情况大致相同。

您可以在网上找到更详细的说明,例如: here