java - 退出 java (Grails) 应用程序后, "used"内存未释放

标签 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 应用程序终止,这怎么可能呢?

最佳答案

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

Mem 行显示内核当前分配了多少内存;然而,内核会延迟释放内存。如果没有其他进程请求内存,它可能会保留分配的页面(可能是从磁盘读取的内容)。

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

您可以在网上找到一些更详细的解释,例如here .

关于java - 退出 java (Grails) 应用程序后, "used"内存未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190846/

相关文章:

java - java中如何获取目录的最后修改日期和时间

java - postgres 中 ctid 的 JDBC 类型是什么?

spring - 如何在创建war文件之前让Grails执行shell命令?

c++ - 为什么内存地址以 0x 开头?

javascript - 提高 JavaScript 中工厂模式的内存效率

java - 无法使用 Java selenium 单击 JSP 网页框架内的元素

java - 在 Java 中,如何使用 HttpURLConnection 关闭连接并释放端口/套接字?

database - 关于如何每天重新加载演示站点数据库的想法

grails - 为什么grails中没有用于过滤器的拦截器

Android:在 onDraw 上创建位图