Java'的相对性能;s垃圾优先(G1)垃圾收集器?

Java'的相对性能;s垃圾优先(G1)垃圾收集器?,java,performance,garbage-collection,Java,Performance,Garbage Collection,有人知道Java新的垃圾优先(Garbage First,G1)垃圾收集器(与“旧”GC相比)的性能基准吗 就GC暂停时间而言,Sun指出G1有时比CMS好,有时比CMS差。虽然G1收集器成功地限制了总暂停时间,但它仍然只是一个软实时收集器。换句话说,它不能保证它不会影响应用程序线程始终满足其最后期限的能力。但是,它可以在一组定义良好的界限内运行,这使得它非常适合需要保持高吞吐量性能的软实时系统 我想了解Java的CMS(并发标记扫描)和G1(垃圾优先)收集器的吞吐量和延迟的实际度量 原

有人知道Java新的垃圾优先(Garbage First,G1)垃圾收集器(与“旧”GC相比)的性能基准吗

就GC暂停时间而言,Sun指出G1有时比CMS好,有时比CMS差。虽然G1收集器成功地限制了总暂停时间,但它仍然只是一个软实时收集器。换句话说,它不能保证它不会影响应用程序线程始终满足其最后期限的能力。但是,它可以在一组定义良好的界限内运行,这使得它非常适合需要保持高吞吐量性能的软实时系统

我想了解Java的CMS(并发标记扫描)和G1(垃圾优先)收集器的吞吐量和延迟的实际度量


原始科学文章(由Detlefs、Flood、Heller和Printezis撰写)包含一些关于实际测量的细节(在第4节)。

这篇文章(2009-08-29)比较了Java 5、6和7在4个简单基准上的性能。

G1与CMS相比,由于多线程的思想,速度更快。与并行GC相比,我不知道-它可能是相同的。 当然,G1更具实时性,因为没有两种线程在运行(主要是小线程)。它更快,因为任何线程都应该对性能产生相同的影响。即使压缩也只能在复制时进行。 有关更多详细信息,请仔细查看以下内容:

我们刚刚完成了CMS和G1的一系列测试,使用了类似的人体工程学。这是特定于产品的,而且非常主观,我们正在使用Java6(所以G1在“预览”版本中),但是

使用CMS的系统比G1快20%。这是用8GB和12GB堆空间、1GB和1.5GB年轻空间(分别)测试的


同样-主观的,单一系统的,特定的负载-但这是我们的经验。

更新:见下文

如果您有一个web应用程序,或者另一个处理大量客户机/请求的应用程序,并且响应时间对您很重要,那么您最好使用CMS。 此测试在“Java性能和可伸缩性”中找到

更新日期:2019年11月18日

下面比较每个垃圾收集器的暂停。 2019年,我认为WebApp的最佳选择仍然是CMS,直到您可以直接切换到ShenandoahGC(跳过G1)

链接:

了解GC暂停可能不是常规应用程序中响应时间的唯一重要因素,这一点很重要。大GC暂停很可能会导致响应时间问题,但缺少长GC暂停并不总是意味着有足够的响应时间。排队延迟、网络延迟、其他服务延迟、操作系统调度程序抖动等可能是造成成本增加的原因。建议运行带有响应时间测量的Shenandoah,以全面了解系统中正在发生的事情,然后可以使用它与GC暂停时间统计数据关联

例如,这是一个jHiccup关于以下工作负载之一的示例报告:


如何定义“更快”?更高的吞吐量,更低的延迟,什么?CMS提供了更好的吞吐量和更少的总停止时间。我们没有测试单个事务的响应性。这篇论文很有意思,但是如果g1真的适用于具有大堆的服务器应用程序,那么这篇论文中的度量值(都小于1g堆)可能不是很有用。