Java中的GC是否通过并行运行100%而不引入延迟(停止世界)?

Joh*_*ine 7 java optimization garbage-collection g1gc

只是好奇.我听说过关于新G1GC处理延迟问题的一些事情.我不能/不想使用RTSJ.

提前致谢

mik*_*era 7

您可能对Zing JVM之类的东西感兴趣.

Azul系统在低延迟JVM调优方面投入了大量精力.我相信还有一些有趣的技术论文可以解释这是如何完成的.


Mat*_*all 6

听起来你正在寻找CMS GC - 并发标记扫描.

在此输入图像描述

(来源:https://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf,p.12)


2015年12月更新:您可能对Azul的"暂停"GC感兴趣.有关更多内容,请参阅Azul的"暂停"垃圾收集器的说明.


Ste*_*n C 2

我不认为有任何零暂停垃圾收集器。但一般来说,像 CMS 这样的低暂停收集器就可以完成这项工作。

停顿和停顿减少的问题如下:

  • 零暂停(或几乎零暂停)收集机制显着增加了正常程序执行的开销。对于 Java 等多线程语言尤其如此。

  • 如果应用程序生成太多垃圾,那么使用一个或多个专用线程进行垃圾收集的方案可能会陷入困境。

  • 如果应用程序的内存使用模式过于“不稳定”和/或您没有足够的物理和虚拟内存,则任何 GC 方案都会给您带来较差的性能。

  • 有无暂停 GC(例如,[Azul 的](http://www.azulsystems.com/products/zing/faq#pauseless),这意味着服务器端 JVM),但 Oracle JVM 本身绝对没有。 (3认同)