【发布时间】:2012-08-08 22:38:21
【问题描述】:
我正在开发一个 Java 应用程序,它有时会做一些繁重的工作。
在这种情况下,它会使用比平时更多的内存,因此应用程序分配的内存空间会增加。
我的问题是为什么工作完成后分配的空间没有减少?
使用分析器,我可以看到例如分配了 70mb,但只使用了 5mb!
看起来分配的空间只能增长,不能缩小。
谢谢
【问题讨论】:
-
你需要等待GC来。
-
我尝试等待 20 分钟,但没有任何改变。我也尝试做一个 System.gc()
-
System.gc() 只是在另一个线程上调用 GC。你需要让它做它的事情。 20 分钟内什么都不做不会调用 GC。 GC 仅在需要 RAM 时调用,而不是在使用率高时调用。
-
你不能调用 GC.collect() 来强制收集吗?
-
我相信这是正确的——一旦分配了内存,它就不会返回给操作系统。 GC 会清理使用过的内容,但不会返回任何内容供其他应用使用。