Oracle已开始考虑针对Java 9之类的JDK增强提案的JEP 248 ,这将使Garbage-First(G1)成为其标准垃圾收集器。 该决定在Java社区引起了轰动,许多人认为并发标记扫描(CMS)收集器绰绰有余。
以前,用于服务器配置的标准垃圾收集器是ParallelOld,其目的是通过偶尔的世界停止(STW)暂停来最大化应用程序吞吐量。 这特别适合于响应时间无关紧要的应用(例如批处理)。
G1收集器的对比度最大程度地减少了STW暂停,为此考虑到了较重的负担。 这对于低延迟的应用程序(例如Web服务器)特别有效。 Oracle本身对此观点表示赞同 ,CMS收集器在HotSpot中扮演相同的角色,因此引起了社区争议:
并发收集器是为那些希望较短的垃圾收集暂停并且可以在应用程序运行时与垃圾收集器共享处理器资源的应用程序而设计的。
许多基准测试清楚地表明,相对于G1收集器,CMS选项在占地空间相对较小的应用中更好,这也反映在官方说明中 :
G1的首要重点是为运行需要大堆且GC延迟有限的应用程序的用户提供解决方案。 这意味着堆大小约为6GB或更大,并且稳定且可预测的暂停时间低于0.5秒。
Oracle JDK 7,更新4和更高版本完全支持G1收集器。 如果使用CMS或ParallelOld运行的应用程序具有以下一个或多个特征,则建议切换到G1:
- 超过50%的Java堆被实时数据占用。
- 对象分配率或提升率差异很大。
- 不必要的长时间垃圾收集或压缩暂停(长于0.5到1秒)
欢迎通过OpenJDK和hotspot-gc-use@openjdk.java.net邮件列表提供进一步的反馈和评论。
翻译自: https://jaxenter.com/oracle-proposes-g1-default-garbage-collector-java-9-118041.html