【发布时间】:2014-01-21 00:48:04
【问题描述】:
我已经阅读并搜索了有关泄漏内存和逐渐增加 RAM 的论坛。我尝试在我的程序中每 60 秒使用一次 System.GC() 方法的调用,并且考虑到我的 RAM 使用量每次调用都会下降,它似乎正在工作。为什么不使用这种方法是个好主意?在我读过的每一篇文章中,他们似乎都含糊地解释了为什么该方法不能释放内存,但我的程序似乎另有说明。有些人甚至说该方法根本没有做任何事情,只是建议垃圾收集器清理自己。注意:我的泄漏不是来自我知道的静态方法,因为我从整个项目中删除了它们并且 RAM 仍然增加了。我会发布我的代码,但它相当大,所以我怀疑是否有人愿意阅读它。
感谢您的帮助。
【问题讨论】:
-
你并没有真正保存任何调用 GC 的东西。当堆填满时,将触发 GC,并没有真正的优势(但有 执行成本)导致它更快发生。
-
要明白,每次你创建一个要在打印语句中使用的字符串时,你(在某种程度上)“泄漏”了该字符串的存储空间,因为它不会立即“回收”你已经完成了。不过没关系,因为 GC 会找到这些未使用的对象并为您回收存储。但这不需要立即发生 - 与等待“正常”触发 GC 相比,提前恢复存储没有任何优势。
-
@Hot Licks 好的,我现在明白了。默认情况下仅打印出信息会增加内存使用量,调用 GC 方法会清理用于此目的的 RAM。那么我该如何解决这个明显的泄漏问题。我删除了所有的静力学,但没有重大变化。我有大量使用计时器的 actionListener 可能是问题所在?
-
什么“明显的泄漏问题”?到目前为止,您还没有描述过一个。
-
@Hot Licks 当我运行程序时,我以图形方式打印出的内存使用量一直在逐渐增加,除非我使用 GC 方法。
标签: java memory-leaks garbage-collection