Jim*_*ack 14 java garbage-collection
我有一个24x6计划运行的应用程序.目前,在运行几天后,将自动执行Full GC - 通常在一天的繁忙时段执行,这会对用户响应时间产生负面影响.
我想做的是强制使用全GC - 可能在每晚的午夜,在极低的使用时间内 - 以防止它在白天发生.我已经尝试过System.gc(),但它似乎并不能保证何时会发生Full GC,或者即使它会发生.有没有办法做到这一点?
版本信息:
Java(TM)SE运行时环境(版本1.6.0_11-b03)
Java HotSpot(TM)服务器VM(版本11.0-b16,混合模式)
另外 -
更具体地说,我正在寻找一种技术来确保Full GC将要发生,而不是一个简单的方法/函数来调用它来运行它.
目前,我正在考虑修改CMS使用的百分比阈值,以确定何时需要完整GC.
谢谢你的帮助.
Ale*_*zin 16
jmap -histo:live <PID>将强制Full GC作为查找所有活动对象的"副作用".您可以安排它在非工作时间回收JVM进程.
您的JVM build 1.6.0_11-b03非常古老,但jmap应该在所有1.6 HotSpot JVM上都受支持.
Bor*_*der 12
没有.
System.gc() 向GC建议您想要一个集合.
此外,在安静期间可能产生很少的垃圾,这就是为什么呼叫System.gc()不会做太多.
在高峰时段,可能会有更多活动,因此产生更多垃圾 - 因此需要收集.
很明显,你不能以简单的方式推迟收集.JVM将在需要时收集.
你需要调查你的GC - 如果你已经停止了世界收藏,那么你就会遇到一些问题.这不应该在现代服务器JVM上发生.
您应该考虑调整CMS收集器 - 这是一篇关于Java系统基础知识的非常好的文章.在Java 7中有新的G1GC可能会或可能不会更好.
您应该找到一种模拟负载条件并尝试不同GC参数的方法,CMS GC有许多调整参数,配置它有点像黑暗的艺术......
这是一篇关于GC调优和基准测试的文章.