这篇文章正好接上前一年我们做的一次现实环境下不同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日志&#x