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


以下是我使用的方法(尽管我在快捷方式而不是设置文件中使用了它们):

eclipse.exe -showlocation -vm "C:\Java\jdk1.6.0_07\bin\javaw.exe" -vmargs -Xms256M -Xmx768M -XX:+UseParallelGC -XX:MaxPermSize=128M


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


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

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


-showlocation

为了让eclipse更容易运行两次,并知道您正在处理哪个工作区

Eclipse 3.6添加了一个首选项选项来指定要显示的工作区名称(显示在窗口标题中),这比-showlocation好用得多,原因有三:

不需要重新启动eclipse即可使其生效。 你可以选择一个短代码。 它出现在透视图和应用程序名称之前。


Eclipse Ganymede 3.4.2设置


有关最新的设置,请参阅上面的Eclipse Galileo 3.5设置。


JDK

在我看来,最好的JVM设置总是包括你能找到的最新JDK(所以目前为止,jdk1.6.0_b07到b16,除了b14和b15)

eclipse.ini

即使有这么低的内存设置,我也可以用2Go RAM在我2002年的旧台式机上运行大型java项目(以及web服务器)。

-showlocation
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-framework
plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
-vm
jdk1.6.0_10\jre\bin\client\jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx384m
-Xss2m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CompileThreshold=5
-Dcom.sun.management.jmxremote

请看GKelly的SO回答和Piotr Gabryanczyk的博客文章,了解更多关于新选项的细节。

监控

你也可以考虑发布:

C:\[jdk1.6.0_0x path]\bin\jconsole.exe

正如之前关于内存消耗的问题所述。


如果您使用的是Linux + Sun JDK/JRE 32位,请将“-vm”更改为:

-vm 
[your_jdk_folder]/jre/lib/i386/client/libjvm.so

如果您使用的是Linux + Sun JDK/JRE 64位,请将“-vm”更改为:

-vm
[your_jdk_folder]/jre/lib/amd64/server/libjvm.so

这在Ubuntu 8.10和9.04上运行得很好


如果您要使用jdk6更新14,我建议使用G1垃圾收集器,这似乎有助于提高性能。

要做到这一点,删除这些设置:

- xx: + UseConcMarkSweepGC - xx: + CMSIncrementalMode - xx: + CMSIncrementalPacing

然后用这些替换它们:

-XX:+解锁实验性VMOptions -XX:+使用G1GC


Eclipse Galileo 3.5和3.5.1设置

目前(2009年11月),我正在用jdk6更新17测试以下配置选项集(使用Galileo—eclipse 3.5)。3.4或以上版本的helios3.6.x,请参见下文): (当然,将eclipse.ini中的相对路径调整为正确的设置路径)

注意:对于eclipse3.5,替换startup和launcher。图书馆行:

-startup
plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519

eclipse.ini 3.5.1

-data
../../workspace
-showlocation
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
384m
-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-vm
../../../../program files/Java/jdk1.6.0_17/jre/bin/client/jvm.dll
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx384m
-Xss4m
-XX:PermSize=128m
-XX:MaxPermSize=384m
-XX:CompileThreshold=5
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-Dcom.sun.management.jmxremote
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=C:/jv/eclipse/mydropins

更多信息请参见上面我的原始答案。

变更(2009年7月起)

指的是启动器而不是框架 共享插件:org.eclipse.equinox.p2.reconciler.dropins。目录选项。 Galileo完全支持工作空间或VM的相对路径(当然,如果您的JVM和工作空间保持不变,则可以避免从一个eclipse安装到另一个eclipse安装时修改它们) 在此之前,当eclipse启动时,这些相对路径一直被重写为绝对路径…… 您还可以将Java JDK安装的JRE目录复制到eclipse目录中

警告

有一个被忽略的错误,实际上与JDK有关。 一定要使用JDK6u16或更新的版本来启动eclipse(然后可以在eclipse中定义任意数量的JDK来编译:并不是因为使用JDK6启动eclipse就必须使用相同的JDK来编译)。

Max

注意用法:

--launcher.XXMaxPermSize
384m
-vmargs
-XX:MaxPermSize=128m

正如Eclipse Wiki中所记录的那样,

Eclipse 3.3支持启动器的一个新参数:——launcher. xxmaxpermsize。 如果正在使用的VM是Sun VM,并且还没有-XX:MaxPermSize= VM参数,那么启动器将自动将-XX:MaxPermSize=256m添加到正在使用的VM参数列表中。 3.3启动器只能识别Windows上的Sun虚拟机。

如本条目所述:

Not all vms accept the -XX:MaxPermSize argument which is why it is passed in this manner. There may (or may not) exist problems with identifying sun vms. Note: Eclipse 3.3.1 has a bug where the launcher cannot detect a Sun VM, and therefore does not use the correct PermGen size. It seems this may have been a known bug on Mac OS X for 3.3.0 as well. If you are using either of these platform combination, add the -XX flag to the eclipse.ini as described above. Notes: the "384m" line translates to the "=384m" part of the VM argument, if the VM is case sensitive on the "m", then the so is this argument. the "--launcher." prefix, this specifies that the argument is consumed by the launcher itself and was added to launcher specific arguments to avoid name collisions with application arguments. (Other examples are --launcher.library, --launcher.suppressErrors) The -vmargs -XX:MaxPermSize=384m part is the argument passed directly to the VM, bypassing the launcher entirely and no check on the VM vendor is used.


XX:+UseParallelGC,这是有史以来最棒的选择!!


您也可以尝试使用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.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

如果你和我一样,对当前的Oracle 1.6版本有问题,那么你可能想要更新JDK或设置-XX:MaxPermSize。更多信息请访问:http://java.dzone.com/articles/latest-java-update-fixes


下面是我自己在i7 2630M 16GB内存笔记本电脑上运行Eclipse的设置,这个设置已经使用了一周,没有一次崩溃,Eclipse 3.7运行平稳。

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms1024m
-Xmx4096m 
-XX:MaxPermSize=256m

计算: 适用于win7 x64

Xms =物理内存/ 16 Xmx =物理内存/ 4 MaxPermSize =保持默认值256m


-startup
../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.100.v20110502
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Dcom.sun.management.jmxremote
-Declipse.p2.unsignedPolicy=allow

这些设置对我来说就像一个魅力。我正在运行OS X10.6, Eclipse 3.7 Indigo, JDK1.6.0_24


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”的限制。

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