我用Java编写了一个程序,用于检测运行它的计算机何时处于空闲状态。当重置空闲时间(换句话说,使用鼠标或键盘)时,程序将锁定计算机。此程序设计为在计算机启动时运行,并在机器开启时继续运行。我的问题是程序占用的空间越来越长。我认为没有任何理由应该这样做;没有像ArrayList那样不断添加的东西。该程序在内存中“扩展”大约每小时10兆字节。我应该做些什么垃圾收集吗?
答案 0 :(得分:1)
听起来你甚至没有问题。 10 MB真的不是那么大。可能是垃圾收集者根本没有"决定"跑了一会儿。您可以尝试通过调用System.gc()直接调用GC,但实际上,除非您的内存不足或出现性能问题,否则我不会太担心。
答案 1 :(得分:0)
尝试将堆大小设置为较低的值...然后垃圾回收器应该先启动。手动拨打System.gc()
也应该解决您的问题。如果这在一段时间后导致OutOfMemory异常和/或内存仍在不断增加,那么你确实在某处发生了内存泄漏。
答案 2 :(得分:0)
每当您的程序使用new
运算符时,运行时将分配可能无法释放的新内存,直到垃圾收集器决定是时候回收可用空间。所以,即使你不是"泄漏"通过添加到永远不会清除的集合,你仍在使用内存,你的使用量会随着时间的推移而增长。
考虑取消对new
的调用(例如,通过重用现有对象)或调整JVM上的堆大小设置,以便在需要考虑内存消耗时更频繁地启动垃圾回收器。