优化eclipse启动

前言

看了周志明的深入理解java虚拟机后,对虚拟机内部运行有了一定的了解,书中有个例子是关于优化eclipse启动速度的,忍不住手痒来尝试下,同时把过程分享给大家。

作为一个程序猿,对eclipse在熟悉不过了,可谓是日夜陪伴,eclipse的打开与运行速度也时刻影响着工作的热情。下面针对eclipse启动速度进行优化。

 

优化eclipse的步骤

1、 增加插件,查看每次打开时间

2、 查看各部分启动耗时

3、 根据耗时部分去优化

3.1优化jdk

3.2编译时间与类加载优化

3.3gc优化

4、优化完成,查看结果。

准备插件

首先,编写编写一个eclipse启动计时插件,源码及导出的插件如下:

插件下载地址为:http://download.youkuaiyun.com/detail/ll413343176/7866121

把该插件放入到eclipse的plugin下面,重启eclipse即可看到如下提示,可以看到现在eclipse启动耗时8.5s

 

各部分启动耗时

使用Java VisualVM查看各部分启动耗时情况,本工具存在于jdk安装目录下/bin/jvisualvm.exe。jdk1.6以上才会有,打开后按照提示安装上Visual GC插件。

下面为eclipse启动信息截图,可以看到主要耗时为类加载2.4s Full GC 1.8s

 

优化内容

1、 jdk优化

jdk版本比较低的同学先考虑升级下jdk。笔者一直使用1.6,这步就直接掠过。每次jdk更新时都会对执行效率做优化,其他同学可根据自己需求,升级到高版本的jdk。

 

2、 类加载优化

通过多次启动eclipse观察,类加载时间都在2s以上,其中不少时间都消耗在字节码验证部分,考虑到eclipse是可信的,那么此处把字节码验证去掉,在eclipse.ini中增加参数-Xverify:none,此时重新启动,发现类加载时间少了0.5s左右

 

3、 编译优化

此处编译优化指的是JIT编译,即即时编译为本地代码,使用-Xint可以禁止,但结果发现禁止后会大幅度增加启动时间,由此看来JIT运行时编译还是很有必要的。

 

4、 gc优化

在eclipse.ini中增加以下参数

-XX:+PrintGCTimeStamps                 打印gc停顿时间

-XX:+PrintGCDetails         打印gc详细信息

-verbose:gc               打印gc信息

-Xloggc:gc.log          记录gc日志

再次启动后可以在eclipse根目录下产生一个gc.log的文件,打开此文件可以看到每次gc的详细信息。下面摘取其中两次Full GC来分析

 

Full GC 1

4.105: [GC 4.105: [DefNew:2229K->256K(2368K), 0.0022285 secs] 24313K->22517K(32880K), 0.0022588 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

4.153: [GC 4.153: [DefNew:2368K->182K(2368K), 0.0021921 secs] 24629K->22675K(32880K), 0.0022206 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

4.158: [Full GC 4.158: [Tenured:22493K->22689K(30512K), 0.0941863 secs] 22812K->22689K(32880K), [Perm :30463K->30463K(30464K)], 0.0942554 secs] [Times: user=0.09 sys=0.00,real=0.09 secs]

4.301: [GC 4.301: [DefNew:2560K->196K(2880K), 0.0011719 secs] 25249K->22886K(40696K), 0.0011970 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

4.406: [GC 4.406: [DefNew:2737K->254K(2880K), 0.0025144 secs] 25427K->23141K(40696K), 0.0025434 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

 

 

Full GC 2

5.087: [GC 5.087: [DefNew:2817K->320K(2944K), 0.0036476 secs] 26186K->23998K(41172K), 0.0036779 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

5.129: [GC 5.129: [DefNew:2944K->320K(2944K), 0.0037255 secs] 26622K->24808K(41172K), 0.0037595 secs] [Times: user=0.01 sys=0.00, real=0.00secs]

5.179: [Full GC 5.179: [Tenured:24488K->25189K(38228K), 0.1135886 secs] 27275K->25189K(41172K), [Perm :38655K->38655K(38656K)], 0.1136502 secs] [Times: user=0.11 sys=0.00,real=0.11 secs]

5.346: [GC 5.346: [DefNew:2944K->141K(3264K), 0.0014177 secs] 28133K->25330K(45248K), 0.0014476 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

5.392: [GC 5.392: [DefNew:3085K->320K(3264K), 0.0018217 secs] 28274K->25732K(45248K), 0.0018483 secs] [Times: user=0.00 sys=0.00, real=0.00secs]

 

查看上面的日志可以明显发现,Full GC前后整个堆内存都进行了扩展(加粗部分),其他Full GC也类似。那么现在可以确定,eclipse启动时Full GC大多由于堆内存(主要是老年代)扩展引起的,那么现在定死老年代大小,在eclipse启动参数中增加:

-Xms512m

-Xmx512m

-Xmn184m

-XX:MaxPermSize=128m

-XX:PermSize=128m

 

验证

现在已经优化完成,现在重新打开次,看下效果吧。启动时间成功进入5s以内,加载类时间1.25s,年轻代gc 328ms,无full gc,效果显著。小伙伴们,还不赶紧试试

 

 

提高 JAVA IDE 的性能的JVM开关 Submitted by 小天蝎 on 2005, August 18, 2:45 PM. integration 我的本本是p4 1.8G的dell c640 内存1G,eclipse 3.1 + myeclipse 4.0m2 速度还不错。 运行参数如下:eclipse.exe -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M -------------- JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关和非标准开关。其中一些设置可以提高 JAVA IDE 的性能。 注意,由于 -X (尤其是 -XX JVM)开关通常是 JVM 或 JVM 供应商特定的,本部分介绍的开关可用于 Sun Microsystems J2SE 1.4.2。 以下设置在大多数系统上将产生比工厂更好的设置性能。 -vmargs - 表示将后面的所有参数直接传递到所指示的 Java VM。 -Xverify:none - 此开关关闭Java字节码验证,从而加快了类装入的速度,并使得在仅为验证目的而启动的过程中无需装入类。此开关缩短了启动时间,因此没有理由不使用它。 -Xms24m - 此设置指示 Java 虚拟机将其初始堆大小设置为 24 MB。通过指示 JVM 最初应分配给堆的内存数量,可以使 JVM 不必在 IDE 占用较多内存时增加堆大小。 -Xmx96m - 此设置指定 Java 虚拟机应对堆使用的最大内存数量。为此数量设置上限表示 Java 进程消耗的内存数量不得超过可用的物理内存数量。对于具有更多内存的系统可以增加此限制,96 MB 设置有助于确保 IDE 在内存量为 128MB 到 256MB 的系统上能够可靠地执行操作。注意:不要将该值设置为接近或大于系统的物理内存量,否则将在主要回收过程中导致频繁的交换操作。 -XX:PermSize=20m - 此 JVM 开关不仅功能更为强大,而且能够缩短启动时间。该设置用于调整内存"永久区域"(类保存在该区域中)的大小。因此我们向 JVM 提示它将需要的内存量。该设置消除了许多系统启动过程中的主要垃圾收集事件。SunONE Studio 或其它包含更多模块的 IDE 的用户可能希望将该数值设置得更高。 下面列出了其它一些可能对 ECLIPSE 在某些系统(不是所有系统)上的性能产生轻微或明显影响的 JVM 开关。尽管使用它们会产生一定的影响,但仍值得一试。 -XX:CompileThreshold=100 - 此开关将降低启动速度,原因是与不使用此开关相比,HotSpot 能够更快地将更多的方法编译为本地代码。其结果是提高了 IDE 运行时的性能,这是因为更多的 UI 代码将被编译而不是被解释。该值表示方法在被编译前必须被调用的次数。 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC - 如果垃圾回收频繁中断,则请尝试使用这些开关。此开关导致 JVM 对主要垃圾回收事件(如果在多处理器工作站上运行,则也适用于次要回收事件)使用不同的算法,这些算法不会影响整个垃圾回收进程。注意:目前尚不确定此收集器是提高还是降低单处理器计算机的性能。 -XX:+UseParallelGC - 某些测试表明,至少在内存配置相当良好的单处理器系统中,使用此回收算法可以将次要垃圾回收的持续时间减半。注意,这是一个矛盾的问题,事实上此回收器主要适用于具有千兆字节堆的多处理器。尚无可用数据表明它对主要垃圾回收的影响。注意:此回收器与 -XX:+UseConcMarkSweepGC 是互斥的。=====================================================================================================================建议启动参数:c:\eclipse\eclipse.exe -vmargs -Xverify:none -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值