G1,CMS及PARALLEL GC的比较

标签: g1 cms parallel | 发表时间:2014-05-01 22:57 | 作者:
出处:http://it.deepinmind.com

这篇文章正好接上前一年我们做的一次现实环境下不同GC算法性能比较的试验。这次我们仍然进行同样的试验,不过增加了对G1回收器的测试,并且在多个平台进行测试。今年我们测试的垃圾回收器有如下几个:

  • -XX:+UseParallelOldGC
  • -XX:+UseConcMarkSweepGC
  • -XX:+UseG1GC

运行环境

我们使用现成的 JIRA任务来运行这个测试。选择它的原因非常简单——除去Minecraft(一款著名网游),愤怒的小鸟,以及Eclipse不说, JIRA应该是最著名的Java应用程序了。并且和别的候选者相比,它更能代表我们日常的业务处理流程——毕竟来说Java用得最多的地方还是在服务端的Java企业级应用。

影响我们决定的还有一个因素—— Atlassian的工程师们发布了一个打包好的JIRA压测脚本 。我们可以直接用它来进行我们的基准测试。

我们仔细的将最新版的JIRA6.1解压,然后把它安装到Mac OS X Mavericks上。最后直接使用默认的内存参数设置来运行这个测试程序。Atlassian团队的家伙已经帮我们把参数也设置好了:

   -Xms256m -Xmx768m -XX:MaxPermSize=256m

这个程序使用了JIRA的常见的几种不同功能——创建任务,分配任务,解析任务,查找及发现任务,等等。总的运行时间是30分钟。

我们使用了三种不同的GC算法来运行这个测试——Parallel,CMS, 和G1。每次测试都重新启动一个新的JVM实例,并事先把存储恢复到同样的状态。一切准备就绪后我们才开始启动压测。

结果

每次测试我们都通过-XX:+PrintGCTimeStamps -Xloggc:/tmp/gc.log -XX:+PrintGCDetails来收集GC日志,最后使用GCViewer来分析里面的数据。

汇总后的结果如下。注意测试结果的单位是毫秒。

Parallel CMS G1
Total GC pauses 20 930 18 870 62 000
Max GC pause 721 64 50

说明

首先来看Parallel GC (-XX:+UseParallelOldGC)。在这30分钟的测试过程中,并行收集器的GC大概暂停了有21秒。最长的一次花了721毫秒。我们来以这个做为基准:从总的运行时间来看,GC周期减少了1.1%的吞吐量。最长的延迟时间大概是721毫秒。

下一个:CMS(-XX:+UseConcMarkSweepGC)。在30分钟的测试中,由于GC而损失的时间是19秒。吞吐量和上一次的并行模式下的差不多。不过时延方面有了明显的改善——最坏的情况下的时延减少了10倍!现在最大的GC暂停时间只有64毫秒。

最后一次测试用的是最新最潮的GC算法——GC(-XX:+UseG1GC)。运行的是同样的测试程序,不过结果的吞吐量则严重下降了。这次测试应用在GC上花费的时间超过了一分钟。和CMS只有1%的开销相比,这次的吞吐量下降了有3.5%。不过如果你不在乎吞吐量而更在乎时延的话——这方面它和前面表现最好的CMS相比还有20%的提升——G1回收器最长的暂停时间只有50ms。

结论

想通过这么一次试验来得出一个结论是非常危险的。如果你的时间充足又有相应的能力的话——你应该在自己的环境中具体情况具体分析,而不是使用一刀切的方法。

不过如果说非要得出一个结论,我认为说CMS仍然是最佳的默认选择。G1的吞吐量实在是太差,和它所减少的那点时延相比并不划算。

原创文章转载请注明出处: G1,CMS及PARALLEL GC的比较

英文原文链接

相关 [g1 cms parallel] 推荐:

G1,CMS及PARALLEL GC的比较

- - Java译站
这篇文章正好接上前一年我们做的一次现实环境下不同GC算法性能比较的试验. 这次我们仍然进行同样的试验,不过增加了对G1回收器的测试,并且在多个平台进行测试. 今年我们测试的垃圾回收器有如下几个:. 我们使用现成的 JIRA任务来运行这个测试. 选择它的原因非常简单——除去Minecraft(一款著名网游),愤怒的小鸟,以及Eclipse不说, JIRA应该是最著名的Java应用程序了.

[转]Oracle Parallel 多线程

- - Oracle - 数据库 - ITeye博客
对于一个大的任务,一般的做法是利用一个进程,串行的执行,如果系统资源足够,可以采用parallel技术,把一个大的任务分成若干个小的任务,同时启用n个进程/线程,并行的处理这些小的任务,这些并发的进程称为并行执行服务器(parallel executeion server),这些并发进程由一个称为并发协调进程的进程来管理.

CMS gc实践总结

- - 编程语言 - ITeye博客
声明:原文转自http://www.blogjava.net/killme2008/archive/2009/09/22/295931.html,该文所有合法权益归原作者所有,仅在此做技术分享使用. 首先感谢阿宝同学的帮助,我才对这个gc算法的调整有了一定的认识,而不是停留在过去仅仅了解的阶段. 在读过sun的文档和跟阿宝讨论之后,做个小小的总结.

一次CMS GC的调优工作

- - 舒の随想日记
某台机器的内存比较大,之前的JVM参数是4G的堆,在压测过程中发现当QPS上来以后,Full GC会开始抬头,YoungGC的频率就不用说了,比较高. 观察GC日志和jstat -gcutil,感觉是QPS在峰值的时候对象创建比较多,也有大对象产生. 于是打算加大堆的大小来延缓GC的时机,并且有一些GC参数的优化,反复调整后找到了一个适合我们的参数(没有一个best的参数,还是得按照应用的的情况去测量,最好是一遍压测一遍调整,最终找到一个best fit的参数组).

Oracle rebuild index 使用 parallel 时 与 并行度 的注意事项

- - CSDN博客推荐文章
一.Rebuild 索引 与 并行度 说明. 在之前的Blog里整理了一些列有关索引相关的Blog,如下:. Oracle 索引 详解. 如何加快建index 索引 的时间. Oracle 索引扫描的五种类型. Oracle 索引的维护. Oracle alterindex rebuild 与ORA-08104 说明.

从G1到G16 HTC Android帝国超级大盘点

- avalon - FeedzShare
来自: HTC手机之家 - FeedzShare  . 发布时间:2011年07月26日,  已有 3 人推荐. HTC成立于1997年,在经历了14年风雨后已是领跑全球智能手机发展的巨头企业. 从早期的Smart Phone、Windows Mobile系统以及经典的838侧滑智能手机,到与苹果iPhone抗衡的Touch Diamond,再到现在的双核强机Sensation以及HD7,可以说它生产的每一个系列手机都堪称经典.

从G1到G16:HTC Android帝国超级大盘点

- 电饭锅 - Dongde.in 您懂的!
HTC成立于1997年,在经历了14年风雨后已是领跑全球智能手机发展的巨头企业. 从早期的Smart Phone、Windows Mobile系统以及经典的838侧滑智能手机,到与苹果iPhone抗衡的Touch Diamond,再到现在的双核强机Sensation以及HD7,可以说它生产的每一个系列手机都堪称经典.

JVM G1(Garbage-First Garbage Collector)收集器全过程剖析

- - 掘金后端
G1垃圾收集器的设计原则是“首先收集尽可能多的垃圾(Garbage First)”,目标是为了尽量缩短处理超大堆(超过4GB)产生的停顿. 因此, G1并不会等内存耗尽(比如 Serial 串行收集器、 Parallel并行收集器 )者快耗尽( CMS)的时候才开始垃圾回收,而是在内部采用了启发式算法,在老年代中找出具有高收集收益的分区( Region)进行收集.

VCMS 发布1.1版——用 web2py 开发的开源 CMS 系统

- Ken - python.cn(jobs, news)
VCMS是用Python Web开发框架web2py开发的开源CMS系统. VCMS于9月21日发布了1.1版本,更新内容包括:文章列表分页、. RSS订阅入口、按考试日期查询考试资讯等. 用web2py开发Web应用是一种享受,欢迎感兴趣的童鞋加入开发:). VCMS是一个简单的用web2py开发的内容管理系统(CMS),适用于个人或中小企业发布资讯.

locomotive - 用Rails3开发的开源CMS软件

- yuaz - ITeye资讯频道
用Rails做的CMS - locomotive ,功能超级棒. 支持多域名,可以对页面内部的不同区块直接编辑,所思即所得. 用的技术都很潮,Rails最新的版本3.0.7,存储用了MongoDB,内置多语言支持. 还是开源的:http://www.locomotivecms.com (要翻wall) ,国外已有软件公司用它做二次开发来卖CMS软件了.