eclipse优化

在jvm学习中一点点学习了eclipse的优化.目录下有一个计算eclipse启动时间的插件,只要放到eclipse的plugin目录下就可以.
1 首先,java版本的升级可以带来性能的免费提升.比如从jdk5升级到jdk6.通过eclipse.ini中的-vm参数 ,修改了JVM路径,使用了jdk1.6 update21.但是报了一个out of memery..具体的原因是:永久代溢出.hotspot默认的永久代是64M,但是很明显eclipse这种大的工具来说64M的永久代根本不够.但是在使用jdk1.5的时候却不会出现内存溢出,原因在于,eclipse.ini中存在一个--launcher.XXMaxPermSize  256M 参数.当eclipse.exe运行在sun公司的虚拟机上的时候,就会自动把-XX:MaxPermSize=256m传入到jvm运行参数中,所以不会有溢出问题.但是问题在于,JDK1.6 Update21以后java.exe等命令的Company属性从 Sun变成了Oracle.eclipse就不识别这个参数,所以也不会把-XX:MaxPermSize=256m参数带过去,所以造成了永久代内存溢出的问题.
   经测试,这个问题在eclipse3.6中已经解决.
2 经过测试jdk6对于eclipse的字节码验证比jdk5多了将近4s(这个具体的讨论可以见 www.iteye.com/topic/826542).考虑到eclipse还是比较靠谱的,所以我们可以去除字节码验证.添加 -Xverify:none
3 第三个调节的地方在于,尽量减少GC的次数.eclipse启动的full gc主要的原因在于 老年代和永久代的扩容.所以针对这个方面,可以固定老年代和永久代的内存大小..做法是 -Xms512m -Xmx512m -XX:PermSize=96m -XX:MaxPermSize=96m
  由于我本机eclipse刚装,启动时间差不多是4.6s的样子.所以我个人设置这两个值效果并不是很明显(大概提升了0.1s).个人建议还是升级到96m的样子,因为根据我的这边看到的数字,永久代大小(permsize)大概是55m的样子.系统默认的最小值是64m.估计随便装几个插件或者工程就会造成扩容(注意eclipse.ini里面定义了,最大的permsize是256m)
  还有一个地方在于,eclipse在启动的时候代码中显式的调用了几次gc(也就是显式的System.gc();).这样也会额外的增加gc的次数.所以,我们可以强制关闭显式gc.所以带上参数 -XX:+DisableExplicitGC
  除了启动的时候,我们在使用eclipse编写代码的时候,我们也可以做一些优化来减少full gc的次数.因为一次full gc基本都要超过1s的,修改系统默认老年代gc频率,系统默认是老年代中内存占68%就进行一次full gc.我们可以增加.-XX:CMSInitiatingOccupancyFraction=85 这样就改成85%才full gc
4 优化代码编译.代码编译是一个非常耗时的任务.查看VisualVM 的参数看到,在全工程编译的时候其实CPU的占用并不高,这点可以利用,我们可以一边编译一边干其他事,对于这个应用来说,CMS收集器是最合适的.所以强制指定eclipse的垃圾收集器为CMS.-XX:+UseParNewGC -XX:+UseConcMarkSweepGC  注意,如果CPU不高的话,可以不考虑这个优化

最后总结一下
--设置最大的堆和最小堆大小.两者一样表示固定大小.这样可以防止老年代内存扩展造成额外的gc.当然也会多占一些内存.系统内存不足的慎用
-Xms512m
-Xmx512m
--加大年轻代内存.减少minor gc
-Xmn164m
--这个是永久代大小.默认是64M,增加到96M.固定大小,减少扩展造成的gc
-XX:PermSize=96m
-XX:MaxPermSize=96m
--去除字节码验证
-Xverify:none
--屏蔽显示调用gc.
-XX:+DisableExplicitGC
--关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销
-Xnoclassgc
--指定最适合多任务并行的CMS垃圾收集器
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
--修改默认的触发老年代full gc的内存所占比..改成85%
-XX:CMSInitiatingOccupancyFraction=85

你可能感兴趣的:(eclipse 优化)