我知道garbage-collection
用于摆脱孤立对象(丢失其引用的对象),但是可以为garbage-collecting
中的Java
设置自定义间隔吗?
答案 0 :(得分:4)
建议应用程序不要告诉GC运行。最好将其留给JVM做出决定。
为什么?
因为JVM最了解。 JVM可以访问允许其在最佳时间运行JVM的信息,以针对高吞吐量或低暂停时间进行优化。它可以监视各种堆“空间”的大小,并估计启动收集的最佳时间以及要启动的收集类型。决策很复杂。
相比之下,如果应用程序在固定的时间间隔内调用System.gc()
,则它可能会在不需要时运行,而不必要地使用了CPU周期。确实,如果在没有垃圾的情况下运行GC,它将花费大量时间扫描所有活动对象……然后什么都做不到。
要注意的另一件事是,如果不忽略System.gc()
,则常见的行为是运行完整的垃圾回收。根据您的JVM的GC选项,这可能会导致所有应用程序线程被冻结。如果堆很大,则完整集合的“ GC暂停”可能很重要。
另一个答案建议使用sun.rmi.dgc.client.gcInterval
属性。这旨在处理RMI应用程序中的远程引用的集合。它可以在其他情况下工作,但是由于上述原因,这是不可取的。
答案 1 :(得分:1)
使用Runtime.getRuntime().gc()
或System.gc()
可以建议JVM进行垃圾回收,但是您不能设置间隔或以任何方式调用它
调用gc方法表明Java虚拟机在回收未使用的对象上花费了很多精力,以使它们当前占用的内存可用于快速重用。当控件从方法调用返回时,Java虚拟机将尽最大努力从所有丢弃的对象中回收空间。
答案 2 :(得分:0)
无用单元收集的全部目的是,开发人员无需担心内存管理(与往常一样,可能会有例外,但是很少见)
如前所述,您只能建议JVM从Java代码中触发GC。
如果您的GC间隔有问题,也许您可以改为为JVM设置一些参数? 也许您可以使用参数:
gcInterval(ms) = max interval between GC
但是我本人从未使用过它,所以对此没有经验。