您为运行Eclipse找到的最佳JVM设置是什么?


当前回答

又到了每年的这个时候:“eclipse.ini take 3”设置反击!

Eclipse Helios 3.6和3.6。x设置

可选文字 http://www.eclipse.org/home/promotions/friends-helios/helios.png

在设置Eclipse Ganymede 3.4之后。x和Eclipse Galileo 3.5。下面是Eclipse Helios 3.6.x的“优化”Eclipse .ini设置文件:

基于运行时选项, 使用Sun- oracle JVM 1.6u21 b7, 7月27日发布(一些Sun专有选项可能涉及)。

(所谓“优化”,我指的是能够在我们蹩脚的工作机上运行一个完整的Eclipse,一些2002年的老式P4,带有2Go RAM和XPSp3。但我也在Windows7上测试了相同的设置)

Eclipse.ini

警告:对于非windows平台,请使用Sun专有选项-XX:MaxPermSize,而不是Eclipse专有选项——launcher.XXMaxPermSize。 也就是说:除非您使用的是最新的jdk6u21 build 7。 请参阅下面的Oracle部分。

-data
../../workspace
-showlocation
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
-vm
C:/Prog/Java/jdk1.6.0_21/jre/bin/server/jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Declipse.p2.unsignedPolicy=allow
-Xms128m
-Xmx384m
-Xss4m
-XX:PermSize=128m
-XX:MaxPermSize=384m
-XX:CompileThreshold=5
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+CMSIncrementalPacing
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods
-Dcom.sun.management.jmxremote
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=C:/Prog/Java/eclipse_addons

注意: 调整p2.reconciler.dropins。目录到您选择的外部目录。 看这个SO答案。 其思想是能够将新插件放置到独立于任何Eclipse安装的目录中。

下面几节详细介绍了这个eclipse.ini文件中的内容。


可怕的Oracle JVM 1.6u21(预构建7)和Eclipse崩溃

Andrew Niefer确实提醒了我这种情况,并写了一篇博客文章,关于一个非标准的vm参数(-XX:MaxPermSize),可能导致来自其他供应商的vm根本无法启动。 但是该选项的eclipse版本(——launcher.XXMaxPermSize)不适用于新的JDK (6u21,除非你使用的是6u21 build 7,见下文)。

最终的解决方案在Eclipse Wiki上,对于Windows上的Helios只有6u21 pre build 7:

下载已修复的eclipse_1308.dll(2010年7月16日) 然后放入

(eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503

就是这样。这里没有设置需要调整(再次强调,仅适用于Windows上的Helios,拥有6u21预build 7)。 对于非windows平台,您需要恢复到Sun专有选项-XX:MaxPermSize。

该问题是基于一个回归:由于Oracle在java.exe中重命名而导致JVM识别失败,并在Eclipse上触发bug 319514。 Andrew处理了Bug 320005 - [launcher] -launcher。XXMaxPermSize: isSunVM对于Oracle应该返回true,但这只适用于helios3.6.1。 Francis Upton,另一个Eclipse提交者,对所有情况进行了思考。

7月27日u21b7更新: Oracle已经在下一个Java 6版本中回归了这个变化,并且在JDK 7之前不会再次实现它。 如果使用jdk6u21构建7,则可以恢复到——启动器。XXMaxPermSize (eclipse选项)而不是-XX:MaxPermSize(非标准选项)。 自动检测发生在C启动器shim eclipse.exe仍然会寻找“Sun Microsystems”字符串,但有了6u21b7,它现在将再次工作。

目前,我仍然保留-XX:MaxPermSize版本(因为我不知道每个人什么时候会启动eclipse正确的JDK)。


隐式的' -startup '和'——launcher.library '

与前面的设置相反,不再设置这些模块的确切路径,这很方便,因为它可以在不同的Eclipse 3.6之间变化。x版本:

startup:如果没有指定,可执行文件将在插件目录中查找具有最高版本的org.eclipse.equinox.launcher包。 发射器。library:如果未指定,可执行文件将在插件目录中查找适当的org.eclipse.equinox.launcher。[platform]片段,并在其中使用名为eclipse_*的共享库。


使用JDK6

现在启动Eclipse显式地需要JDK6:

-Dosgi.requiredJavaVersion = 1.6

这个SO问题报告了在Mac OS上开发的积极发生率。


+解锁实验性VMOptions

以下选项是Sun JVM的一些实验性选项的一部分。

-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods

在这篇博客文章中已经报告了它们可能会加速Eclipse。 在这里和官方的Java Hotspot选项页面中可以看到所有的JVM选项。 注意:这些选项的详细列表报告了UseFastAccessorMethods在默认情况下可能是活动的。

请参见“更新JVM”:

提醒一下,G1是为JDK 7准备的新垃圾收集器,但已经在u17的版本6中使用了。


从命令行打开Eclipse中的文件

请看Andrew Niefer关于这个新选项的博客文章:

--launcher.defaultAction
openFile

这告诉启动器,如果调用它的命令行只包含不以"-"开头的参数,那么这些参数应该被视为跟随"——launcher. openfile "。

eclipse myFile.txt

当您双击与eclipse相关联的文件,或者您选择文件并选择“打开eclipse”或“发送到”eclipse时,启动程序将在windows上收到这类命令行。 相对路径将首先针对当前工作目录解析,然后针对eclipse程序目录解析。

参考bug 301033。最初bug 4922(2001年10月,9年后修复)。


p2和Unsigned对话框提示符

如果你在安装许多插件的过程中厌倦了这个对话框:

,在eclipse.ini中添加:

-Declipse.p2.unsignedPolicy=allow

请参阅Chris Aniszczy的这篇博客文章和错误报告235526。

I do want to say that security research supports the fact that less prompts are better. People ignore things that pop up in the flow of something they want to get done. For 3.6, we should not pop up warnings in the middle of the flow - no matter how much we simplify, people will just ignore them. Instead, we should collect all the problems, do not install those bundles with problems, and instead bring the user back to a point in the workflow where they can fixup - add trust, configure security policy more loosely, etc. This is called 'safe staging'.

http://www.eclipse.org/home/classies/images/wiki.gif alt文本http://www.eclipse.org/home/classies/images/wiki.gif

附加选项

这些选项没有直接在上面的eclipse.ini中,但是如果需要的话可以派上用场。


“用户。Windows7上的home '问题

当eclipse启动时,它将读取它的keystore文件(保存密码的地方),该文件位于user.home。 如果出于某种原因,用户。home不能正确地解析到完整的路径,Eclipse将不会启动。 最初在这个SO问题中提出,如果遇到这种情况,您需要将密钥库文件重新定义为显式路径(不再有用户。回家解决一开始)

在eclipse.ini中添加:

-eclipse.keyring 
C:\eclipse\keyring.txt

这已经被bug 300577跟踪,它已经解决了另一个SO问题。


调试模式

等等,Eclipse中有不止一个设置文件。 如果你在eclipse.ini中添加以下选项:

-debug

,您启用调试模式,Eclipse将寻找另一个设置文件:一个.options文件,您可以在其中指定一些OSGI选项。 当你通过dropins文件夹添加新插件时,这是很棒的。 在你的.options文件中添加以下设置,如这篇博客文章“Dropins diagnosis”所述:

org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/reconciler=true

P2会告诉你在dropins/文件夹中找到了什么包,生成了什么请求,以及安装计划是什么。也许它并没有详细解释实际发生了什么,哪里出了问题,但它应该给你从哪里开始的强有力的信息: 你的包裹在计划中吗? 是安装问题吗(P2故障) 或者也许这并不是包含你的功能的最佳选择?

这来自Bug 264924 - [reconciler]没有诊断dropins问题,这最终解决了以下问题:

Unzip eclipse-SDK-3.5M5-win32.zip to ..../eclipse
Unzip mdt-ocl-SDK-1.3.0M5.zip to ..../eclipse/dropins/mdt-ocl-SDK-1.3.0M5

这是一个有问题的配置,因为OCL依赖于缺少的EMF。 3.5M5没有提供此问题的诊断。 启动eclipse。 没有明显的问题。错误日志中没有任何内容。 帮助/关于/插件详细信息显示了org.eclipse.ocl.doc,但没有显示org.eclipse.ocl。 帮助/关于/配置细节没有(诊断性)提及 org.eclipse.ocl。 帮助/安装/信息安装软件中没有提到org.eclipse.ocl。 漂亮的错误标记在哪里?


清单类路径

请看这篇博客文章:

在Galileo(又名Eclipse 3.5)中,JDT开始解析添加到项目构建路径中的库中的清单类路径。无论库是直接添加到项目的构建路径中,还是通过类路径容器(如JDT提供的用户库设施或由第三方实现的用户库设施)添加到项目的构建路径中,这都是有效的。 在Helios中,此行为被更改为从manifest类路径解析中排除类路径容器。

这意味着您的一些项目可能不再在Helios中编译。 如果你想恢复到Galileo行为,添加:

-DresolveReferencedLibrariesForContainers=true

参考bug 305037、bug 313965和bug 313890。


IPV4堆栈

这个SO问题提到了一个无法访问插件更新站点的潜在修复:

-Djava.net.preferIPv4Stack=true

这里提到的只是以防它对您的配置有帮助。


JVM1.7x64潜在的优化

本文报道:

为了记录,到目前为止,我在1.7 x64 JVM n Windows的台架测试中发现的最快的选项是:

-Xincgc 
-XX:-DontCompileHugeMethods 
-XX:MaxInlineSize=1024  
-XX:FreqInlineSize=1024 

但我仍在努力……

其他回答

我自己的设置(Java 1.7,修改为1.6):

-vm
C:/Program Files (x86)/Java/jdk1.7.0/bin
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20100628
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-server
-Dosgi.requiredJavaVersion=1.7
-Xmn100m
-Xss1m
-XgcPrio:deterministic
-XpauseTarget:20
-XX:PermSize=400M
-XX:MaxPermSize=500M
-XX:CompileThreshold=10
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UnlockExperimentalVMOptions
-XX:+DoEscapeAnalysis
-XX:+UseG1GC
-XX:+UseFastAccessorMethods
-XX:+AggressiveOpts
-Xms512m
-Xmx512m

虚拟机 C:\Program Files\Java\ jdk1.6.0_07 \ jre \ bin \ client \ jvm.dll

要指定您正在使用的java版本,并使用dll而不是启动javaw进程

Eclipse喜欢大量的RAM。至少使用-Xmx512M。更多,如果有。

您也可以尝试使用JRockit运行。它是针对服务器优化的JVM,但许多长时间运行的客户端应用程序(如IDE)在JRockit上运行得非常好。Eclipse也不例外。JRockit没有烫发空间,所以您不需要配置它。

可以设置一个暂停时间目标(ms)来避免长时间的gc暂停使UI停滞。

-showsplash
org.eclipse.platform
-vm
 C:\jrmc-3.1.2-1.6.0\bin\javaw.exe 
-vmargs
-XgcPrio:deterministic
-XpauseTarget:20

我通常不会费心设置-Xmx和-Xms,而是让JRockit根据需要增加堆。如果您使用JRockit启动Eclipse应用程序,您还可以使用JRockit任务控制工具套件监视、分析和查找应用程序中的内存泄漏。您可以从这个更新站点下载插件。注意,仅适用于Eclipse 3.3和Eclipse 3.4

Eclipse Indigo 3.7.2设置(64位linux)

在x86-64 Linux上运行的Sun/Oracle java版本“1.6.0_31”和Eclipse 3.7的设置:

-nosplash
-vmargs
-Xincgc
-Xss500k
-Dosgi.requiredJavaVersion=1.6
-Xms64m
-Xmx200m
-XX:NewSize=8m
-XX:PermSize=80m
-XX:MaxPermSize=150m
-XX:MaxPermHeapExpansion=10m
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseParNewGC
-XX:+CMSConcurrentMTEnabled
-XX:ConcGCThreads=2
-XX:ParallelGCThreads=2
-XX:+CMSIncrementalPacing
-XX:CMSIncrementalDutyCycleMin=0
-XX:CMSIncrementalDutyCycle=5
-XX:GCTimeRatio=49
-XX:MaxGCPauseMillis=20
-XX:GCPauseIntervalMillis=1000
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+AggressiveOpts
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

注意,这仅为堆使用了200 MB,非堆使用了150 MB。如果你在使用 对于巨大的插件,你可能想增加“-Xmx200m”和“-XX:MaxPermSize=150m”的限制。

这些标志的主要优化目标是在所有情况下最小化延迟,次要优化目标是最小化内存使用。