当CPU负载为5%到8%时,什么情况会阻止JVM运行完整的垃圾收集?
我看到了一个持续的浅层GC周期,但无法调优JVM以运行完整的GC。
我在哪里可以找到JVM说“我太忙而不能运行”的条件。
发布于 2010-08-13 23:38:29
这完全取决于您在特定JDK中使用的垃圾收集器算法。关于垃圾收集,您所能保证的是,如果JVM抛出一个OutOfMemoryError
,垃圾收集器将尽最大努力收集每个不可及/弱可及的对象。即使System.gc()
也不能保证任何东西,no-op是一个完全合法的实现。
因此,从这个角度来看,我不知道你的问题是否有分量。如果您真的认为需要调整垃圾收集器,那么发布您所看到的问题以及导致您相信垃圾收集器性能差是问题的分析数据将会有所帮助。
除此之外,垃圾收集器应该被当作黑盒对待。其实现背后的逻辑令人惊讶地复杂,并且很有可能它比您更清楚它在任何给定时间应该做什么。100次中有99次,试图强制垃圾收集器以特定方式运行会降低性能,而不是提高性能。
发布于 2010-08-13 23:39:17
当我为了我的SCJP认证而学习的时候,很多的重点是
“您不能执行任何操作来强制GC在任何给定时间运行,只能给出提示。”
拥有自动GC的整个想法就是不必担心它如何或何时运行来为您清理空闲内存。因此,实际上没有办法改变GC实际运行的时间和方式……您必须重新实现一个JVM才能做您想做的事情。
这其中涉及的因素太多了,可能会有其他更优雅的解决方案。
发布于 2010-08-13 23:38:02
这并不是说它太忙而无法运行,而是它根本不需要额外的内存。
https://stackoverflow.com/questions/3478406
复制相似问题