列宿乃施于上荣兮 日月才经于柍桭

………… 白驹过隙 岁月如斯 梦萦回绕 心灵之声
posts - 57, comments - 8, trackbacks - 0, articles - 41
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

小试Eclipse性能调优

Posted on 2010-07-25 17:43 默认为零 阅读(701) 评论(0)  编辑  收藏 所属分类: 技术

首先了解下JVM中几个相关的概念:
Xms:最小堆大小
Xmx:最大堆大小
Xmn:年轻代堆大小
Xss:每个线程的堆大小
PermSize:初始持久代大小
MaxPermSize:最大持久代大小

一般Xms、Xmx设置相同,PermSize、MaxPermSize设置相同,这样可以避免伸缩堆大小带来的性能损耗。

首先eclipse安装根目录下打开eclipse.ini,加上配置:

-Xloggc:gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails

目的是运行eclipse的时候可以打出详细gc过程。

启动eclipse,然后打开gc.log一看,哇塞启动一次就做了几十次GC,包括不少次Full GC,着手优化……

先解决Full GC的问题:

……
3.159: [Full GC 3.159: [Tenured: 22716K->26133K(35780K), 0.1116536 secs] 38493K->26133K(51908K), [Perm : 20479K->20479K(20480K)], 0.1117614 secs] [Times: user=0.11 sys=0.00, real=0.11 secs]
3.706: [Full GC 3.706: [Tenured: 26133K->27935K(43556K), 0.1235449 secs] 40042K->27935K(63204K), [Perm : 24575K->24575K(24576K)], 0.1236474 secs] [Times: user=0.13 sys=0.00, real=0.13 secs]
……

如上GC日志可以看出,Full GC主要是针对Tenured、Perm区的GC,好那先调整Perm大小,指定充裕的持久代区域,eclipse.ini中加入:

-XX:PermSize=128m
-XX:MaxPermSize=128m

再次启动看gc.log,Full GC没有了,但是还有很多次普通GC,说明还是需要进一步优化。
eclipse的初始堆大小分配得很小,因此不利于年轻代堆大小的分配,如果设置的年轻代堆大小Xmn大于最小堆大小Xms,eclipse将无法启动。
因此,将Xms调整为512m,重启动后观察GC大幅减少。
最后调整Xmn,年轻代堆大小,经过反复比较后,发现设置“-Xmn256m”效果最优。

优化后的GC日志:

3.203: [GC 3.204: [DefNew: 209776K->26176K(235968K), 0.0876304 secs] 209776K->27184K(498112K), 0.0876921 secs] [Times: user=0.09 sys=0.00, real=0.09 secs]
5.422: [GC 5.422: [DefNew: 235968K->12433K(235968K), 0.0989335 secs] 236976K->39296K(498112K), 0.0990229 secs]

在接近6秒的启动时间内,eclipse总共只做了2次普通GC回收,怎么样效果明显吧!


只有注册用户登录后才能发表评论。


网站导航: