如何加快Eclipse的启动速度?

-startup
plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar
--launcher.library
D:\Java\eclipse\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.401.v20161122-1740
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
-Dosgi.requiredJavaVersion=1.8
-Xms512m
-Xmx1024m
-XX:MetaspaceSize=128M
-verbose:gc
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-Xloggc:gc.log
-Declipse.p2.max.threads=10
-Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest
-Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/

WIN10 I5-6300HQ 8G 内存,打开eclipse巨卡,比Intellij都卡,而且比Injellij占用更多的内存,如上安装版Eclipse配置,加快了许多。


不知道大家是不是跟我一样,打开Eclipse都是龟速,每次点击打开后,我都会跑出去倒杯水再回来。那么有没有什么办法可以加快启动速度呢?我的思路主要有以下几个:

  • 卸载不会再用或不常用的一堆插件。
  • 别把所有的项目都放在一个workspace里面,可以多建几个workspace。比如最近一段时间要着手的一个或几个项目放在一个workspace里。
  • 通过修改Eclipse的配置文件(eclipse.ini)来加快Eclipse的启动速度。

前面两个相信大部分人都能想到,做起来也很简单,本文主要介绍第三种方式,即通过修改配置文件来加速。

我的环境:

Eclipse版本:Eclipse LUNA
JDK版本:jdk 1.8.0
本机内存:6G

首先需要在eclipse.ini里面添加-Xloggc:gc.log配置来查看启动的日志,然后通过分析日志来调优参数。

我原先的vmargs参数配置如下(后面添加了几个打印日志选项)

-Xms40m
-Xmx256m
-verbose:gc
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-Xloggc:gc.log

启动Eclipse成功后,配置目录下会多处一个gc.log的日志文件,内容如下:

2014-12-01T17:17:24.102+0800: 1.011: [GC (Allocation Failure) [PSYoungGen: 10240K->1528K(11776K)] 10240K->2573K(39424K), 0.0357842 secs] [Times: user=0.00 sys=0.00, real=0.04 secs]
2014-12-01T17:17:24.695+0800: 1.604: [GC (Allocation Failure) [PSYoungGen: 11768K->1528K(11776K)] 12813K->6418K(39424K), 0.0163152 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
2014-12-01T17:17:24.933+0800: 1.843: [GC (Allocation Failure) [PSYoungGen: 11768K->1528K(11776K)] 16658K->10668K(39424K), 0.0209557 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
2014-12-01T17:17:25.766+0800: 2.676: [GC (Allocation Failure) [PSYoungGen: 11768K->1528K(22016K)] 20908K->12994K(49664K), 0.0152186 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
2014-12-01T17:17:27.385+0800: 4.294: [GC (Allocation Failure) [PSYoungGen: 22008K->1521K(22016K)] 33474K->19971K(49664K), 0.0243423 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
2014-12-01T17:17:28.515+0800: 5.424: [GC (Metadata GC Threshold) [PSYoungGen: 14910K->6286K(50176K)] 33360K->24736K(77824K), 0.0408780 secs] [Times: user=0.09 sys=0.00, real=0.04 secs]
2014-12-01T17:17:28.556+0800: 5.466: [Full GC (Metadata GC Threshold) [PSYoungGen: 6286K->0K(50176K)] [ParOldGen: 18450K->21574K(46080K)] 24736K->21574K(96256K), [Metaspace: 19172K->19172K(1069056K)], 0.3825136 secs] [Times: user=0.75 sys=0.00, real=0.38 secs]
2014-12-01T17:17:33.134+0800: 10.044: [GC (Allocation Failure) [PSYoungGen: 40960K->9212K(50176K)] 62534K->34014K(96256K), 0.0848276 secs] [Times: user=0.13 sys=0.00, real=0.09 secs]
2014-12-01T17:17:35.882+0800: 12.792: [GC (Metadata GC Threshold) [PSYoungGen: 37650K->12260K(61952K)] 62451K->41391K(108032K), 0.0443515 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]
2014-12-01T17:17:35.926+0800: 12.837: [Full GC (Metadata GC Threshold) [PSYoungGen: 12260K->0K(61952K)] [ParOldGen: 29131K->31402K(68096K)] 41391K->31402K(130048K), [Metaspace: 32296K->32296K(1079296K)], 0.2952576 secs] [Times: user=0.45 sys=0.00, real=0.30 secs]
2014-12-01T17:17:40.580+0800: 17.490: [GC (Allocation Failure) [PSYoungGen: 49664K->12627K(65536K)] 81066K->44038K(133632K), 0.0400038 secs] [Times: user=0.08 sys=0.00, real=0.04 secs]
2014-12-01T17:17:43.820+0800: 20.730: [GC (Allocation Failure) [PSYoungGen: 62291K->17399K(63488K)] 93702K->51113K(131584K), 0.0402957 secs] [Times: user=0.02 sys=0.02, real=0.04 secs]
2014-12-01T17:17:44.362+0800: 21.271: [GC (Metadata GC Threshold) [PSYoungGen: 25530K->13577K(59904K)] 59244K->47299K(128000K), 0.0291300 secs] [Times: user=0.05 sys=0.00, real=0.03 secs]
2014-12-01T17:17:44.391+0800: 21.301: [Full GC (Metadata GC Threshold) [PSYoungGen: 13577K->0K(59904K)] [ParOldGen: 33721K->39688K(88576K)] 47299K->39688K(148480K), [Metaspace: 53933K->53933K(1099776K)], 0.4561979 secs] [Times: user=0.67 sys=0.02, real=0.46 secs]
2014-12-01T17:17:50.364+0800: 27.274: [GC (Allocation Failure) [PSYoungGen: 46080K->11833K(66048K)] 85768K->51530K(154624K), 0.0260724 secs] [Times: user=0.05 sys=0.00, real=0.03 secs]
2014-12-01T17:17:52.379+0800: 29.289: [GC (Allocation Failure) [PSYoungGen: 56889K->14031K(66048K)] 96586K->53735K(154624K), 0.0301987 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
2014-12-01T17:17:54.831+0800: 31.742: [GC (Allocation Failure) [PSYoungGen: 59087K->16928K(62976K)] 98791K->56641K(151552K), 0.0651508 secs] [Times: user=0.14 sys=0.00, real=0.07 secs]
2014-12-01T17:18:12.857+0800: 49.768: [GC (Allocation Failure) [PSYoungGen: 58912K->17695K(59904K)] 98625K->57415K(148480K), 0.0486718 secs] [Times: user=0.09 sys=0.00, real=0.05 secs]

可以发现Full GC的次数为3次,minior GC的次数为15次。
进一步分析发现:

  • 触发Full GC和部分GC的原因是“Metadata GC Threshold”,没用过java 8的人可能对这个不熟悉,因为Metaspace是java 8的新特性,取代了大家非常熟悉的PermGen,具体了解可以看这篇文章:Java 8新特性探究(九)跟OOM:Permgen说再见吧
    上面的意思是说Metaspace的大小设置的太小了,造成频繁GC,这个可以通过-XX:MetaspaceSize参数设置。
    注意:关于Metaspace的配置不只是-XX:MetaspaceSize这一个参数,还有其它的,主要有下面这些:
    • -XX:InitialBootClassLoaderMetaspaceSize=32M:to increase the boot class loader Metaspace;
    • -XX:MinMetaspaceFreeRatio=50:to make Metaspaces grow more agressively;
    • -XX:MaxMetaspaceFreeRatio=80:to reduce the chance of Metaspaces shrinking;
    • -XX:MinMetaspaceExpansion=4M:the minumum size by which a Metaspace is exanded;
    • -XX:MaxMetaspaceExpansion=16M:the maximum size to expand a Metaspace by without Full GC.
  • 大部分的Minor GC都出现了AF(Allocation Failure)错误,AF 并不表示有什么代码发生了错误,而只是无法从堆中分配足够的空间。这也能理解,上面Eclipse的默认配置中Xms(初始化堆大小)只有40m,-Xmx(最大堆大小)只有256m,这里加大这两个参数的配置即可。

经过上述分析,我修改的配置参数如下:

-Xms512m
-Xmx1024m
-XX:MetaspaceSize=128M
-verbose:gc
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-Xloggc:gc.log

此时重启Eclipse后发现速度稍快了点,打印日志如下:

2014-12-01T18:14:11.134+0800: 7.991: [GC (Allocation Failure) [PSYoungGen: 131584K->21493K(153088K)] 131584K->35355K(502784K), 0.1561477 secs] [Times: user=0.30 sys=0.02, real=0.16 secs]
2014-12-01T18:14:18.805+0800: 15.662: [GC (Allocation Failure) [PSYoungGen: 153077K->21494K(284672K)] 166939K->67517K(634368K), 0.1496186 secs] [Times: user=0.16 sys=0.05, real=0.15 secs]

发现Full GC消失了,最后剩下2次Minor GC。不过这2次AF问题我是调不掉了,不管修改什么参数,最终还是会出现这2次GC,相比之前已经很好了,就到此为止吧。如果您有更好的设置方法(比如能够消除最后的两次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、付费专栏及课程。

余额充值