提问



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

最佳参考


这是一年中的时间:eclipse.ini取3设置反击!


Eclipse Helios 3.6和3.6.x设置



alt text http://www.eclipse.org/home/promotions/friends-helios/helios.png [83]


在设置了Eclipse Ganymede 3.4.x和Eclipse Galileo 3.5.x之后,这里深入介绍了Eclipse Helios 3.6.x的优化 eclipse.ini 设置文件:]] [86]



  • 基于运行时选项

  • 并使用7月27日发布的 Sun-Oracle JVM 1.6u21 b7 (某些Sun专有选项可能涉及)。



( byoptimized,我的意思是能够在我们糟糕的工作站上运行一个完整的Eclipse,从2002年开始使用2Go RAM和XPSp3。但我也在Windows7上测试了相同的设置)[87] [88]


的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.directory调整到您选择的外部目录。

看到这个答案。
我们的想法是能够独立于任何Eclipse安装将新插件放在目录中。


以下部分详细介绍了此eclipse.ini文件中的内容。





可怕的Oracle JVM 1.6u21(pre build 7)和Eclipse崩溃



安德鲁·尼弗确实提醒我这种情况,写了一篇博客文章,关于非标准的vm论证( -XX:MaxPermSize ),并且可能导致其他供应商的虚拟机无法启动。< BR>
但是该选项的eclipse版本( --launcher.XXMaxPermSize )不适用于新的JDK(6u21,除非你使用的是6u21 build 7,见下文)。 [[[91]


final 解决方案位于Eclipse Wiki上,适用于Windows上的Helios,仅限6u21预构建7 :[92]



  • 下载修复的eclipse_1308.dll (2010年7月16日)

  • 并将其放入



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


这就是它。没有设置在这里调整(再次,仅适用于Windows上的Helios 6u21 pre build 7 )。

对于非Windows平台,您需要恢复到Sun专有选项-XX:MaxPermSize[93]


这个问题基于一个回归:由于java.exe中的Oracle重新命名导致JVM识别失败,并在Eclipse上触发了错误319514.

Andrew负责Bug 320005 - [[launcher]] --launcher.XXMaxPermSize: isSunVM应该对Oracle返回true,但这仅适用于Helios 3.6.1。

另一位Eclipse提交者Francis Upton对所有情况进行了反思。[94] [95] [96] [97] [98]


更新u21b7,7月27日:

Oracle已经对下一个Java 6版本的变化做了回归,并且在JDK 7 之前不会再次实现它。

如果你使用 jdk6u21 build 7 ,你可以恢复到 --launcher.XXMaxPermSize (eclipse选项)而不是 -XX:MaxPermSize (非标准选项)。

在C发射器垫片eclipse.exe中发生的自动检测仍将寻找Sun Microsystems字符串,但是对于6u21b7,它现在​​将再次工作。[99] [100]


现在,我仍然保留-XX:MaxPermSize版本(因为我不知道每个人都会启动eclipse 正确的 JDK)。





隐式`-startup`和`--launcher.library`



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



  • startup:如果未指定,可执行文件将在plugins目录中查找具有最高版本的org.eclipse.equinox.launcher包。

  • launcher.library:如果未指定,可执行文件会在plugins目录中查找具有最高版本的相应org.eclipse.equinox.launcher.[platform]片段,并使用名为eclipse_*的共享库。






使用JDK6



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


-Dosgi.requiredJavaVersion = 1.6


这个SO问题报告了在Mac OS上发展的积极事件。





+ UnlockExperimentalVMOptions



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


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


在这篇博客文章中已经报道了它们可能加速Eclipse。

请参阅此处的所有JVM选项以及官方Java Hotspot选项页面
注意:这些选项的详细列表报告UseFastAccessorMethods默认情况下可能处于Activity状态。 [102] [103] [104] [105]


另请参阅更新JVM:[106]



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






从命令行打开Eclipse中的文件



请参阅Andrew Niefer的博客文章,报告此新选项:[107]


--launcher.defaultAction
openFile



  这告诉启动器,如果使用仅包含不以-开头的参数的命令行调用它,则应将这些参数视为遵循--launcher.openFile



eclipse myFile.txt



  这是当您双击与eclipse关联的文件时,启动程序将在Windows上接收的命令行,或者您选择文件并选择Open WithSend ToEclipse。

  
  首先针对当前工作目录解析相对路径,然后针对eclipse程序目录解析相对路径。[108]



请参阅错误301033以供参考。最初的错误4922(2001年10月,9年后修复)。[109] [110]





p2和Unsigned Dialog Prompt



如果您在安装许多插件时厌倦了此对话框:





,加入eclipse.ini:


-Declipse.p2.unsignedPolicy=allow


请参阅Chris Aniszczy的博客文章和错误报告235526. [111] [112] [113]



  我想说安全研究支持这样一个事实,即提示越少越好
  人们忽略了他们想要完成的事情中出现的事情。

  
  对于3.6,我们不应该在流程中间弹出警告 - 无论我们简化多少,人们都会忽略它们。

  相反,我们应该收集所有问题,不安装那些有问题的捆绑包,而是让用户回到他们可以修复的工作流程中的一个点 - 添加信任,更松散地配置安全策略,这被称为安全分期[114]



---------- http://www.eclipse.org/home/categories/images/wiki.gif替代文字http://www.eclipse.org/home/categories/images/wiki.gif alt text http://www.eclipse.org/home/categories/images/wiki.gif[115][116][117]


其他选项



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





Windows7上的user.home问题



当eclipse启动时,它将读取其密钥库文件(保存密码),文件位于user.home

如果出于某种原因,user.home并没有正确地解决自己的问题,那么Eclipse就不会开始。

最初在这个SO问题中提出,如果您遇到这种情况,您需要将密钥库文件重新定义为显式路径(不再需要用户在开始时解决)


加入eclipse.ini:


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


这已被错误300577跟踪,它已在其他SO问题中得到解决。[119]





调试模式



等等,Eclipse中有多个设置文件。

如果你添加到eclipse.ini选项:


-debug


,您启用调试模式,Eclipse将查找另一个设置文件:.options文件,您可以在其中指定一些OSGI选项。

当你通过dropins文件夹添加新的插件时,这很好
在.options文件中添加以下设置,如本博文 Dropins诊断中所述:[121] [122]


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



  P2将通知您在dropins/文件夹中找到了哪些包,生成了什么请求以及安装计划是什么。也许它没有详细解释实际发生了什么,以及出了什么问题,但它应该为您提供有关从哪里开始的强大信息:

  
  

      
  • 是您计划中的捆绑包吗?

  •   
  • 是否存在安装问题(P2故障)

  •   
  • 或者包含您的功能可能不是最佳选择?

  •   



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


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没有提供此问题的诊断。

  
  开始日食。

  没有明显的问题。错误日志中没有任何内容。

  
  

      
  • Help / About / Plugin详情显示org.eclipse.ocl.doc,但不是org.eclipse.ocl

  •   
  • Help / About / Configuration细节没有(诊断性)提及
      org.eclipse.ocl

  •   
  • Help / Installation / Information Installed Software没有提到org.eclipse.ocl

  •   

  
  错误标记在哪里?






Manifest Classpath



看到这篇博文:[124]



  

      
  • 在Galileo(又名Eclipse 3.5)中,JDT开始解析添加到项目构建路径的库中的清单类路径。无论库是直接添加到项目的构建路径还是通过类路径容器(例如JDT提供的用户库工具或第三方实现的工具),这都有用。

  •   
  • 在Helios中,此行为已更改为从清单类路径解析中排除类路径容器。

  •   



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


-DresolveReferencedLibrariesForContainers=true


有关参考文献,请参阅错误305037,错误313965和错误313890. [125] [126] [127]





IPV4堆栈



这个问题在没有访问插件更新站点时提到了一个潜在的修复:


-Djava.net.preferIPv4Stack=true


这里提到以防万一它可以帮助您的配置。





JVM1.7x64潜在优化



本文报道:[129]



  为了记录,到目前为止,我用1.7 x64 JVM n Windows进行基准测试时发现的最快的选项是:



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



  但我还在努力......


其它参考1


Eclipse Galileo 3.5和3.5.1设置



目前(2009年11月),我正在使用jdk6 update 17测试以下配置选项集(使用Galileo - eclipse 3.5.x,对于 Helios 3.6.x ,请参阅下面的3.4或更高版本):< BR>
(当然,将此eclipse.ini中存在的相对路径调整为您设置的正确路径)


注意:对于 eclipse3.5 ,请将startuplauncher.library行替换为:


-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.directory选项。

  • Galileo支持工作空间或VM的完全相对路径(当然,如果您的JVM和工作空间保持不变,则避免将其从一个eclipse安装修改为另一个)


    以前,当eclipse发动时,那些相对的路径一直被重写成绝对路径......

  • 您还可以在eclipse目录
  • 中复制Java JDK安装的JRE目录


注意事项



忽略的断点存在一个与JDK实际相关的错误。

使用JDK6u16或更新版本用于启动 eclipse(然后你可以在 eclipse中定义你想要编译的许多JDK:这不是因为你用JDK6启动了一个eclipse你是将必须使用相同的JDK编译。)


最高



注意用法:


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


如Eclipse Wiki中所述,[134]



  Eclipse 3.3支持启动器的新参数:--launcher.XXMaxPermSize

  如果正在使用的VM是Sun VM并且还没有-XX:MaxPermSize= VM参数,则启动器会自动将-XX:MaxPermSize=256m添加到正在使用的VM参数列表中。

  3.3启动程序只能识别Windows上的Sun VM。



详情请参阅此条目:[135]



  并非所有的vms都接受-XX:MaxPermSize参数,这就是为什么它以这种方式传递的原因。识别太阳vms可能存在(或可能不存在)问题
  注意:Eclipse 3.3.1有一个错误,启动程序无法检测到Sun VM,因此不会使用正确的PermGen大小。看起来这可能是Mac OS X for 3.3.0上的一个已知错误。

  如果您使用这些平台组合中的任何一个,请按eclipse.ini添加-XX标志,如上所述。 [136] [137]

  
  笔记:

  
  

      
  • 384m行转换为VM参数的=384m部分,如果VM在m上区分大小写,那么这个参数也是如此。

  •   
  • --launcher.前缀,它指定参数由启动器本身使用,并添加到启动器特定参数中,以避免与应用程序参数发生名称冲突。 (其他例子是--launcher.library--launcher.suppressErrors)

  •   

  
  -vmargs -XX:MaxPermSize=384m部分是直接传递给VM的参数,完全绕过启动器,并且不使用VM供应商的检查。


其它参考2


Eclipse Ganymede 3.4.2设置






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





JDK



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


的eclipse.ini



即使使用那些非常低的内存设置,我也可以在旧的(2002)桌面上运行大型Java项目(以及Web服务器)和2Go RAM。


-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的博客文章。 [141]


监控



您还可以考虑启动:


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


如前一个关于内存消耗的问题所述。

其它参考3


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


这些标志的主要优化目标是在所有情况下最小化延迟,并且作为辅助优化目标最小化内存使用。

其它参考4


-showlocation


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


Eclipse 3.6添加了一个首选项选项,用于指定Workspace name (shown in window title)的显示内容,其效果比-showlocation好得多,原因有三:



  1. 您无需重新启动eclipse即可生效。

  2. 您可以选择一个简短的代码。

  3. 首先出现在透视图和应用程序名称之前。


其它参考5


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


为此,请删除以下设置:


-XX:+ UseConcMarkSweepGC

-XX:+ CMSIncrementalMode

-XX:+ CMSIncrementalPacing



并用以下代替它们:


-XX:+ UnlockExperimentalVMOptions

-XX:+ UseG1GC

其它参考6


如果您使用的是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上,我的工作正常

其它参考7


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


可以设置暂停时间目标(ms)以避免长时间停止UI的gc暂停。


-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 Mission Control工具监视,分析和查找应用程序中的内存泄漏您可以从此更新站点下载插件。注意,仅适用于Eclipse 3.3和Eclipse 3.4 [144]

其它参考8


这是我在i7 2630M 16GB RAM笔记本电脑上运行的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


计算:
对于Win 7 x64



  • Xms =物理记忆/16

  • Xmx =物理记忆/4

  • MaxPermSize =与默认值相同,即256m


其它参考9


-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

其它参考10


我自己的设置(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

其它参考11


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

其它参考12


如果您像我一样并且当前的Oracle 1.6版本存在问题,那么您可能想要更新JDK或设置
-XX:MaxPermSize
。有关更多信息,请访问:http://java.dzone.com/articles/latest-java-update-fixes [145]

其它参考13


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

其它参考14


-vm结果
C:\\ Program Files \\ Java \\ jdk1.6.0_07 \\ jre \\ bin \\ client \\ jvm.dll


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

其它参考15


这是我使用的(虽然我在快捷方式而不是设置文件中有它们):


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