ibm jdk 1.5缺省用的gc策略性能很差

ibm jdk 1.5缺省用的gc策略性能很差

这几天测试一个引擎的性能,用一个单表查询的case,测试出来的结果是210tps,cpu也正常,在85%左右,也没怀疑。

后面再重新测试的时候,加上了gc log,用gc分析工具分析了一下gc的吞吐量,发现吞吐量奇低,竟然只有77%左右,很是奇怪,看了一下gc日志,所有都是global gc, 怀疑gc策略有问题,查了一下资料,参考了下面一篇文章:

http://www.ibm.com/developerworks/cn/java/j-ibmjava2/

缺省gc策略是针对吞吐量进行优化:-Xgcpolicy:optthruput ,对于吞吐量比短暂的 GC 停顿更重要的应用程序,通常使用这种策略。每当进行垃圾收集时,应用程序都会停顿。

 

我摘下面一段其他几个gc策略:

切换到其他 GC 策略的原因

切换到 原因

optavgpause

  • 我的应用程序无法忍受那么长的 GC 停顿时间。如果 GC 停顿时间能够减少的话,性能降低一些也可以接受。
  • 我的应用程序正在一个 64 位平台上运行并使用非常大的堆 —— 超过 3 或 4GB。
  • 我的应用程序是一个 GUI 应用程序,我很关注用户响应时间。

gencon

  • 我的应用程序分配了许多短期存活的对象。
  • 堆空间出现碎片化。
  • 我的应用程序是基于事务的(也就是说,在事务提交之后,事务中的对象就不再存活了)。

subpool

  • 在大型多处理器计算机上,我遇到了可伸缩性问题。

 

试了一下gencon策略,hoho,好家伙,测试case的吞吐量竟然提升到290tps(直接提升40%),太夸张了,gc吞吐量也提升到了98%,记得以前1.4的时候没有分代的gc策略,而且印象中,ibm jdk不分代,估计是引入分代机制之后,缺省的optthruput策略变得复杂起来,不像以前那样效率高了。

 

这里也给大家提个醒,当心ibm jdk 1.5的gc策略,发现gc效率很低的时候切换到gencon,也许会有很大的惊喜!

posted on 2008-04-14 20:38 tacy lee 阅读(954) 评论(2)  编辑  收藏 所属分类: 性能相关

没有更多推荐了,返回首页