当CPU负载为5%到8%时,哪些条件会阻止JVM运行FULL Garbage Collection?
我看到一个持续浅的GC循环,但无法调整JVM以运行FULL GC。
我在哪里可以找到JVM说“我忙得跑”的条件。
答案 0 :(得分:7)
当我在学习SCJP认证时,我们非常重视
“你不能做任何事情来逼迫 GC 可以在任何给定时间运行,你可以 只是给它一些提示“
拥有自动 GC 的整个想法正是无需担心它如何或何时运行来为您清理可用内存。因此,没有办法真正改变GC实际运行的时间或方式......你必须重新实现一个JVM来做你想做的事。
这涉及到很多因素,可能还有其他更优雅的解决方案。
答案 1 :(得分:3)
它完全取决于您在特定JDK中使用的垃圾收集器算法。关于垃圾收集的所有可保证的是,如果JVM抛出OutOfMemoryError
,垃圾收集器会尽最大努力收集每个无法访问/弱可访问的对象。即使System.gc()
也不能保证任何事情,否则无操作是完全合法的实施。
因此,从那个角度来看,我不知道你的问题是否有任何重要性。如果你真的相信你需要调整垃圾收集器,那么如果你发布了你所看到的问题,那将会有所帮助,并且导致相信GC性能不佳的分析数据会出现问题。
除此之外,垃圾收集器应该被视为黑盒子。它实现背后的逻辑非常复杂,而且它很有可能比你更了解它在任何特定时间应该做的事情。 100次中的99次,试图强制垃圾收集器以特定方式运行会降低性能,而不是增加它。
答案 2 :(得分:2)
这不是忙于运行,但它确实不需要额外的内存。