我有一个问题 - 在JDK 7中,除了G1之外的所有GC是否都会在年轻代收集时使用停顿式垃圾回收?
谢谢。
我有一个问题 - 在JDK 7中,除了G1之外的所有GC是否都会在年轻代收集时使用停顿式垃圾回收?
谢谢。
对于OpenJDK、JRockit、IBM JVM和Sun/Oracle JDK,每个可用的收集器的年轻代收集器都总是会停止整个应用的运行。
我所知道的唯一没有停止整个应用的运行的JVM是Azul的Zing。(但不是免费的)
虽然OpenJDK/Hotspot有CMS,但它主要是并发的。仍然有一些需要停止整个应用的运行,并且在某些情况下,CMS将退回到全GC。
据我所知,很难找到G1在暂停时间方面比CMS更快的真实世界的例子,尽管它一直在不断改进。
所有(几乎)的Java垃圾回收器都有一定程度的停止-全球阶段,其中所有Java线程(而非本地线程)都被暂停,等待独占式系统操作完成。这种状态有时称为安全点。
现代垃圾回收器与应用程序线程同时运行,这意味着垃圾收集器在应用程序线程运行的同时执行其工作。在垃圾收集器处理期间,需要独占访问内存,在此阶段,应用程序Java线程进入安全点状态。
摆脱停止-全球垃圾收集的一种替代方法是选择来自Azul系统的C4收集器的Zing JVM。该实现采用低暂停方法,根本没有停止-全球收集。相反,它使用了一种并发压缩方法,没有停止-全球阶段。