zoukankan      html  css  js  c++  java
  • 2013第51周二eclipse启动优化

    2013第51周二eclipse启动优化
    今天注意到了eclipse.ini配置文件中gc.log——在eclipse启动时清空,然后记录了eclipse每次运行过程中的gc分配情况,看到了一篇很好的eclipse启动调优文章:

    减少jvm内存回收引起的eclipse卡的问题
    这个主要是jvm在client模式,进行内存回收时,会停下所有的其它工作,带回收完毕才去执行其它任务,在这期间eclipse就卡住了。所以适当的增加jvm申请的内存大小来减少其回收的次数甚至不回收,就会是卡的现象有明显改善。

    主要通过以下的几个jvm参数来设置堆内存的:

    -Xmx512m最大总堆内存,一般设置为物理内存的1/4
    -Xms512m初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了
    -Xmn192m年轻带堆内存,sun官方推荐为整个堆的3/8
    堆内存的组成总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存
    年轻带堆内存对象刚创建出来时放在这里
    年老带堆内存对象在被真正会回收之前会先放在这里
    持久带堆内存class文件,元数据等放在这里
    -XX:PermSize=128m持久带堆的初始大小
    -XX:MaxPermSize=128m持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。
    -XX:+UseParallelGC 使用并发内存回收
    -XX:+DisableExplicitGC 禁用System.gc()的显示内存回收

    一般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回收,怎么样效果明显吧!

    在eclipse启动的时候,它总是会搜索让其运行的jre,往往就是这个搜索过程让eclipse启动变慢了。(没设置时,等2-3s出现进度条,设置后直接出现进度条)

    只要在eclipse.ini中加入-vm的参数就可以了


    2.取消所有启动时要激活的插件(在用时激活也一样)和其它的相关的在启动时执行的操作。


    3.关闭自动更新

    更多信息可参考:
    jvm启动参数大全:http://www.blogjava.net/midstr/archive/2008/09/21/230265.html
    jvm结构的一些知识(其中的堆的构成):http://hllvm.group.iteye.com/group/wiki/2905-JVM
    jvm堆知识:http://ruijf.iteye.com/blog/1028455
    eclipse启动调优:http://www.iteye.com/topic/756538
    eclipse自带的help contents(搜索"Running Eclipse"可以找到启动相关的配置)

      
  • 相关阅读:
    JAVA小记 (1)
    页面布局
    布局
    JDBC连接数据库
    国际化项目
    Class打包成jar
    Description Resource Path Location Type Java compiler level does not match the version of(编译问题)
    SSM框架下 Failed to load resource: the server responded with a status of 404 (Not Found)错误
    DES加密算法
    HashMap 和 Hashtable 的 6 个区别,一般人不知道最后一条
  • 原文地址:https://www.cnblogs.com/doit8791/p/3479255.html
Copyright © 2011-2022 走看看