如何加速Eclipse?

1298

如何使Eclipse的使用更快?

例如:我禁用我不需要的所有插件(如Mylyn、Subclipse等)。

我会配置TortoiseHG作为外部工具,而不是使用Mercurial插件。


41
安装更多的内存条(再加4GB)。我说的很认真。Eclipse可以在一个3GB的Windows 7电脑上运行得很好,但是如果内存不够,它就会不太流畅。 - user166390
11
版本控制是我禁用插件的最后选择。我发现Eclipse在保持工作空间与文件系统同步方面仍然有些不可靠。我并不怪你想要比当前插件中提供的更好的版本控制工具,但我曾经在这个领域被Eclipse所伤。 - Kelly S. French
85
这些答案将我的Eclipse启动时间从20秒减少到不到4秒。 - Dave
4
许多人都发现Eclipse Juno运行非常缓慢,例如切换编辑器等操作。现在有一些改进性能的更新,可以显著改善这种情况。请参考http://wiki.eclipse.org/Platform_UI/Juno_Performance_Investigation来获取安装补丁的指南。 - vertti
3
没有插件时,对我来说仍然非常缓慢。启动时间还好,但每当它需要更新文件引用或其他内容时,就会花费不合理的长时间。有时自动完成也会出现延迟。 - sudo
显示剩余5条评论
43个回答

457

Eclipse 速度最受影响的三个因素是:

  • 使用最新版本的 Eclipse(截至 2020 年 6 月 26 日为止,为 2020-06 版本)
    请注意David Balažic评论(2014 年 7 月)中对此标准提出了异议,但那时候这个标准还有效:

同一个工作区在 Indigo(3.7.2)SR2 中加载时间为 4 秒,在 Kepler SR2(4.3.2)中为 7 秒,在 Luna(4.4.0)中为 10 秒。它们都是 Java EE 捆绑包。较新版本有更多的捆绑插件,但趋势仍然明显。("same" workspace 意味着:使用相同的(另外安装的)插件和从版本控制检出的相同项目)。

  • 使用最新的JDK(Java 14,编写时不妨碍您在Eclipse项目中使用其他任何JDK进行编译:1.4.2、1.5、1.6以及更早版本...)

      -vm jdk1.6.0_10\jre\bin\client\jvm.dll
    
  • 配置eclipse.ini文件(参见this question for a complete eclipse.ini

      -Xms512m
      -Xmx4096m
      [...]
    

Xmx参数是Eclipse将获得的内存量(简单来说)。使用-Xmx4g,它将获得4 GiB的RAM等。


注意:

  1. 引用 jvm.dll 有以下优点:
  • 启动画面更快。
  • 进程列表中出现 Eclipse.exe,而非 java.exe。
  • 防火墙:Eclipse 需要访问互联网,而非 Java。
  • 窗口管理品牌问题,尤其是在 Windows 和 Mac 上。

2020年12月,Udo 在评论中确认了的消息

从4.8版本(Photon)开始,每个版本都稳定提高了速度。
每次发布都对主平台进行了优化,以更快地加载、为暗色主题启用更多功能,并为Java开发工具添加了更新的Java版本的更多功能。
特别是在过去的3个版本中,启动时间大大增加。随着最新版本Eclipse 2020-12的推出,启动时间应该会显著增加。

依照我的经验,每个新版本的启动速度都越来越快了。
但仍有一些插件没有遵循使用Eclipse API的新方式,因此启动速度仍然很慢。
自Eclipse 2020-09起采用Java 11作为最低运行时版本之后,至少核心系统使用了JVM的更新功能。其他插件供应商需要升级到新的API并使用现代CPU的全部性能(例如并发编程模型)。

参见

为Eclipse分配适当数量的线程和内存:问题:Eclipse和Eclipse索引器占用了我所有的资源/CPU%

9
在其他操作系统上,相当于jvm.dll的是什么? - Daniel Rucci
16
从http://wiki.eclipse.org/Equinox_Launcher#Finding_a_VM.2C_Using_JNI_Invocation_or_Executing_Java中获得:“在Windows上为`jvm.dll`,在*nix平台上为**`libjvm.so`**”。 - VonC
3
@Dan:不要混淆 libjava.solibjvm.so:在Linux上,libjava.so 依赖于 libjvm.so,但反过来不成立: $ readelf -d libjava.so Dynamic segment at offset 0x208a8 contains 25 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libjvm.so] [...]:当库包含这样的信息时,ld.so 在进程加载 libjava.so 时会自动加载 libjvm.so - VonC
1
@Dan 当没有给出 -vm 参数时,它将默认使用 jvm.dll 在 Windows 上和平台默认库(例如 libjvm.so)在其他操作系统上;根据 VonC 发布的链接所述_"但是如果您尝试将内存推得太高,它也可能会有一些缺点。"_(https://bugs.eclipse.org/bugs/show_bug.cgi?id=188968#c23) - Drupad Panchal
4
"使用最新版本的Eclipse" - 根据我的经验,情况恰恰相反。在Indigo(3.7.2)SR2中,同一工作区仅需4秒即可加载,在Kepler SR2(4.3.2)中需要7秒,在Luna(4.4.0)中需要10秒。它们都是Java EE捆绑包。虽然更新的版本有更多捆绑插件,但趋势显而易见。(所谓“相同”的工作区是指:使用相同的(另外安装的)插件,从版本控制检出的相同项目。) - David Balažic
显示剩余20条评论

273
-Xverify:none添加到您的eclipse.ini文件中。
这将显著缩短Eclipse启动时间(在我的情况下可减少50%甚至更多)。这会告诉虚拟机不要验证它正在加载的所有.class文件。
考虑到这一点:永远不要在生产系统中禁用字节码验证(如评论中所提到的)。

49
类验证的目的是什么?如果我们在启动时禁用了它,Eclipse 何时有机会执行它? - Ken Russell
16
类验证是确保待运行的代码不会欺骗 JVM 的步骤。 - Thorbjørn Ravn Andersen
15
如果禁用类验证,任何一个拥有漏洞的Java类都可以逃脱Java虚拟机(JVM)并以你的用户账户的身份执行任意想要的代码。一般而言,如果你的安全性依赖于JVM的限制,请不要禁用验证。然而,考虑到Eclipse插件可以写入新文件到文件系统并启动任何可执行文件,即使进行验证也存在大量攻击面。因此,我认为在Eclipse中启用类验证实际上并没有真正提高你的安全性。 - Mikko Rantalainen
8
请注意,这种配置在最新的Java 14中已经过时并被禁止使用。 - pdem
7
自Java 13起,“-Xverify:none”已被弃用。 - Sina Madani
显示剩余11条评论

127

进入 Windows -> Preferences -> Validation 页面,取消勾选任何不需要或不想要的 validators

对于 Eclipse 3.7 版本,请使用 Windows -> Preferences -> General -> Startup and Shutdown 页面。


这些只在启动时运行吗?当我进行构建时,遇到了更多的问题。 - Nathan majicvr.com

87

确保您正在使用Sun JVM来运行Eclipse。

在Linux系统中,特别是Ubuntu系统中,默认情况下安装的Eclipse使用开源GCJ(JVM)。但是,该版本性能明显较差。使用update-alternatives --config java命令切换到Sun JVM可以大大提高Eclipse用户界面的响应速度。


5
目前,您可以安装openjdk-7,它与Sun Java 7没有太大的区别。 - Has QUIT--Anony-Mousse
3
不,OpenJDK中的垃圾回收速度明显比Oracle JDK慢。这是由于其算法存在专利问题所致。 - Mark Lopez
23
@MarkLopez,你能否提供一个权威来源的链接? - Thorbjørn Ravn Andersen
IBM的JVM曾经在许多情况下优于Sun的JVM...时代可能已经改变了! - MikeW
现在(2017年),您应该使用OpenJDK 8运行Eclipse(java -version应该显示类似于“openjdk version“1.8.0_131”)。我发现OpenJDK 9会导致许多任务的性能较差(延迟更高)。 - Mikko Rantalainen

52

关闭任何未被使用的已打开项目。

在开发过程中尽量关闭自动发布模式。


4
前几天我学会了一个技巧。关闭未打开的窗口(我工作区大约有20-30个),立刻就能明显感觉到不同。 - tunaranch

51

感谢提供的提示。这些选项(如上所述)对我非常有帮助:

Windows:

在eclipse.ini文件中增加内存并将其更新为最新的Java版本。

-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx512m
-XX:PermSize=512m
-XX:MaxPermSize=512M
-Xverify:none

另外,由于我们正在优化速度,将-Xms设置为与-Xmx相同的值使得JVM以允许使用的最大内存启动。

Linux / Ubuntu:

使用

update-alternatives --config java

1
你为什么要将XmX设置为512m? - IgorGanapolsky
在Ubuntu中运行您的命令将会得到如下结果:"无需配置。" - IgorGanapolsky
@Igor,堆空间大小(-XmX)取决于您系统的内存。当我提出这个问题时,512m是我旧的WinXP netbook的优化值。在此处阅读更多信息:https://dev59.com/zsFuzogBFxS5KdRjGBYm - Mateng
我指的是运行 update-alternatives --config java。这与 Eclipse.ini 无关。 - IgorGanapolsky
好的,“无需配置”意味着一切正常。 - Mateng
工具“update-alternatives”与这些设置无关。如果出现“没有可配置的内容”,则意味着您只安装/链接了一个Java,因此无法选择另一个安装程序。请查看“man update-alternatives”。 - xoned

49

可以通过禁用标签装饰(Windows -> Preferences; General -> Appearance -> Label Decorations)和在启动时禁用未使用的功能(Windows -> Preferences; General -> Startup and Shutdown)来提升性能。

根据您使用的JVM,选择不同的垃圾收集策略也可以获得额外的性能。

如果您已经厌倦了重启周期,您可以使用ZeroTurnaround的JavaRebel。它将缩短您在服务器/客户端重启上所花费的时间。


8
如果你正在寻找一个开源替代品,可以尝试使用DCE VM而不是JavaRebel。- http://ssw.jku.at/dcevm/ - KrishPrabakar
我喜欢那个关于启动和关闭的提示。 - Christophe Roussy
2
如果您提供哪些装饰器有用的列表,这个答案会更有用。对我来说,至少需要SVN和一些错误装饰器。 - SPRBRN
DCE VM:“注意:最新的Java版本1.6更新26与DCE VM不兼容。支持所有旧的Java 1.6版本。” - aliopi
小心不要盲目地移除装饰(就像我曾经所做的那样,导致丢失了一些重要信息,比如 Git 标签等。详见:https://stackoverflow.com/questions/50861795/eclipse-not-showing-git-repository-status) - JavaTec

40

虽然与Eclipse没有直接关系:

如果你正在运行Windows 7(和大概也适用于Windows Vista),请确保禁用工作区文件夹的文件索引功能,如果你的工作区在默认位置——你的主目录中。 Windows默认会索引你主目录中的所有内容,通常这只是浪费工作区的空间。(在资源管理器中右键单击工作区文件夹,然后选择属性高级。)


这个技巧甚至可以扩展到整个系统磁盘和其他驱动器。最好在全新安装之后执行,因为如果您有更多的文件,整个过程可能需要更长的时间。右键点击目标驱动器,在“常规”选项卡底部取消选中“允许此驱动器上的文件除文件属性外还具有内容索引”。递归过程将开始,这可能需要很长时间,但最终会收到丰硕的回报。(虽然它非常不同,但我会把这种技术与在Linux上使用“noatime”和“nodiratime”选项挂载文件系统进行比较。那也可以创造奇迹。) - Csaba Toth
我建议通常情况下保持索引器开启,除非你不使用Windows中嵌入的搜索功能。对于工作区,最好关闭索引器。 - Kami Kaze

30

禁用病毒扫描器,或者至少配置任何病毒扫描器在读取JAR文件时不扫描。


29

Eclipse会按需加载插件,大多数常用插件如Subclipse在不使用时不会影响Eclipse的运行速度,禁用它们也无法提升性能。实际上,如果正确使用,Mylyn甚至可以降低Eclipse的内存占用。

我安装了很多插件,但并没有任何性能损失。

  • 尝试禁用无用的编译器设置(例如“parameter is never read”下的子选项)。
  • 你使用的是哪个版本的Eclipse?老版本可能会因为重复升级导致插件文件夹里有大量重复的插件(不同版本),从而变得较慢。但在3.4版本中已经解决了这个问题。
  • 使用工作集比关闭项目更有效,特别是需要频繁切换项目集的情况下。

除了增加-Xmx开关指定的内存大小,还需要调整perm gen size大小。我认为这个问题在Eclipse 3.4中已经得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接