有人知道Java的新垃圾优先(G1)垃圾收集器的性能基准(与“旧”GC相比)吗?
就GC暂停时间而言,Sun指出,G1有时比CMS更好,有时更糟。虽然G1收集器成功地限制了总暂停时间,但它仍然只是一个软的实时收集器。换句话说,它不能保证它不会一直影响应用程序线程满足其截止日期的能力。然而,它可以在一组定义良好的边界内工作,这使得它对于需要保持高吞吐量性能的软实时系统来说是理想的。
我希望看到Java(并发标记扫描)和G1 (垃圾优先)收集器的实际吞吐量和延迟度量。
发布于 2010-07-20 19:56:31
最初的科学文章(“垃圾第一垃圾收集”由Detlefs,Flood,Heller和Printezis)包含了一些关于实际措施的细节(见第4节)。
发布于 2011-06-22 13:36:45
我们刚刚完成了对CMS和G1的一系列测试,使用了类似的人机工程学。这是特定于产品的和非常主观的,我们使用的是Java6(因此G1在“预览”构建中),但是.
使用CMS的系统比G1快20%。这是用8GB和12 8GB堆空间、1GB和1.5GB年轻空间(分别)进行测试的。
再一次-主观的,单一的系统,特定的负荷-但这是我们的经验。
发布于 2013-03-13 09:03:23
更新:见下面的
如果您有一个web应用程序,或者另一个处理大量客户机/req的应用程序,并且响应时间对您很重要,那么您最好使用CMS。
这个测试是在'Java性能和可伸缩性‘中发现的。
更新:2019年11月18日
这里比较了每个垃圾收集器的暂停。它的2019年,我认为WebApp的最佳选择仍然是CMS,直到你可以直接切换到ShenandoahGC (跳过G1)。
重要的是要理解GC暂停可能不是常规应用程序中响应时间的唯一重要贡献。大量的GC暂停意味着响应时间的问题具有很高的概率,但是没有长时间的GC暂停并不总是意味着很好的响应时间。排队延迟、网络延迟、其他服务延迟、OS调度程序抖动等可能是造成成本的原因。建议运行具有响应时间测量的神能多( Shenandoah ),以获得系统中正在发生的事情的全貌,然后可以使用它与GC暂停时间统计相关联。
例如,这是一个在工作负载上使用jHiccup的示例报告:
https://stackoverflow.com/questions/3282957
复制相似问题