有排序问题 - JDK 7中的所有GC(G1除外)是否始终使用stop-the-world进行年轻代收集?
感谢
答案 0 :(得分:10)
对于OpenJDK,JRockit,IBM JVM和Sun / Oracle JDK,年轻的集合总是为每个可用的收集器停止世界。
我所知道的唯一没有阻止世界收藏家的JVM是Azul的Zing。 (不是免费的)
虽然OpenJDK / Hotspot有CMS,但这主要是并发的。仍然有世界各地的部分停止,在某些情况下,CMS将回归到一个停止世界的完整GC。
AFAIK,很难找到真实世界的例子,其中G1在暂停时间方面比CMS快,但它一直在改进。
答案 1 :(得分:5)
所有(几乎)Java垃圾收集器都有某种Stop-the-world阶段,其中所有Java线程(非本机线程)都被挂起,等待独占系统操作完成。这种状态有时被称为安全点。
现代垃圾收集器与应用程序线程同时运行,这意味着垃圾收集器在应用程序线程运行的同时执行其工作。在垃圾收集器进程中,存在需要独占访问内存的阶段,在该阶段,应用程序Java线程进入安全点状态。
摆脱世界末日垃圾收集的一个替代方案是使用Azul系统的C4收集器来使用Zing JVM。该实现具有低暂停方法,根本没有停止世界的集合。相反,它使用的是并发压缩方法,没有世界末日。
答案 2 :(得分:3)
不可以。 Java 7还支持较旧的Concurrent Mark Sweep(CMS)收集器。 CMS是一个低暂停收集器,就像G1一样。
<强>更新强>
显然,CMS仅适用于终身代......根据您在http://blogs.oracle.com/jonthecollector/entry/our_collectors找到的博客文章
这意味着你的命题实际上是正确的。
有人可能会争辩说所有的低停顿收藏家: - 需要阻止mutator线程做他们工作的某些阶段,并且 - 当它们无法跟上时,可能会使用标记/扫描收集器回退到完整GC。
但是,G1和CMS之类的“大多数并发”收集器与在整个收集过程中暂停非GC线程的其他收集器之间存在质量差异。这通常意味着“制止世界”战略。