最近,eclipse(eclipse-jee3.5)运行十分缓慢(可能插件安装过多),因此,得到了个机会调优一下,以便提高工作效率
下图是未经任何调整eclipse的gc情况(使用jvisualvm命令,安装visual gc插件)
在终端输入:jvisualvm运行后,工具->插件->visual gc,安装。
启动eclipse后,在终端运行: ps -ef | grep eclipse,然后在jvisualvm的应用程序一栏选择eclipse pid的程序双击,即可到visual gc上查看图表。
-xms1024m
-xmx1024m
对应的为图中的 old 区;
-xx:newsize=768m
-xx:maxnewsize=768m
对应的为图中的 eden 区;
-xx:permsize=200m
-xx:maxpermsize=200m
对应的为图中的 perm区;
从图中可以看出,仅启动过程就有38次young gc,11次full gc
为了查看gc细节,在eclipse.ini中加入如下参数:
-verbose:gc
-xx:+printgcdetails
-xx:+printgcdatestamps
-xloggc:d:/soft/eclipse-jee/gc.log
gc的内容如下:
从gc日志中可以看出:
(1)young区开始为4928k,持续的不够,因此造成不断的young gc
(2)full gc时,old区的空间增大扩容,因此old区空间也不够
为了防止这种情况发生,加入以下参数:
-xms768m
-xmx768m
-xx:newsize=512m
-xx:maxnewsize=512m
此次调整后结果如下图:
从图中可以看出,young gc没有了,但为啥还11次full gc呢?
以下是此次gc的日志:
从gc.log中,可以看出,是因为perm区的没有空间了,才导致的full gc,于是将perm区增大并固定大小
加入以下参数:
-xx:permsize=96m
-xx:maxpermsize=96m
此次调整后结果如下:
可以看出,没有full gc了,而且young gc只有一次,有了一定的效果了
启动时gc的问题解决了,现在来看其他问题:
从图中可以看出,如果classloader加载class的时间能快些,应该也会节省些时间
-xverify:none(关闭java字节码验证,从而加快了类装入的速度)
将上两图比较
第一个:平均每个类的载入时间为,54.615/10950 = 0.0049876712328767s
第二个:平均每个类的载入时间为,34.498/9484 = 0.0036374947279629s
可以看出,多少是有一些性能上的提高的
考虑到eclipse长时间运行,其他可能调节的有以下几点:
(1)关闭system.gc()
(2)提高eclipse中某些代码的jit编译
(3)优化垃圾收集器,以减少垃圾收集造成应用无响应的时间
对于(1),加入以下参数:
-xx:+disableexplicitgc
对于(2),会影响启动速度,但由于eclipse是长时间运行,因此此优化是必要的:
-xx:compilethreshold=100(方法调用多少次就会被编译成本地机器码)
可以看出,编译方法的数量和时间明显增加
对于(3),换用cms收集器应该比串行收集器要好,加入以下参数:
-xx:+useparnewgc
-xx:+useconcmarksweepgc
-xx:cmsinitiatingoccupancyfraction=80
至此,调优结束
总结一下加入的参数如下:
-xloggc:d:/soft/eclipse-jee-galileo-win32/eclipse/gc.log
-xms512m
-xmx512m
-xx:newsize=256m
-xx:maxnewsize=256m
-xx:compilethreshold=100
-xverify:none
<a href="http://blog.csdn.net/gtuu0123/article/details/6720253" target="_blank">http://blog.csdn.net/gtuu0123/article/details/6720253</a>
参考如上内容用的eclipse.ini:
1、小内存,运行情况不错
-clean
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.200.v20130807-1835
-product
org.eclipse.epp.package.cpp.product
--launcher.defaultaction
openfile
-showsplash
org.eclipse.platform
--launcher.xxmaxpermsize
256m
--launcher.appendvmargs
-vmargs
-dosgi.requiredjavaversion=1.6
2、大内存
-xms1600m
-xmx1600m
-xx:newsize=800m
-xx:maxnewsize=800m
-xx:permsize=256m
-xx:maxpermsize=256m
3、大内存,自己弄的,可能优化的不合理
-xms40m
-xmx2048m
-xss1024k