Eclipse的最佳JVM设置是什么?

运行Eclipse的最佳JVM设置是什么?

那是一年的时间:“eclipse.ini取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.x的设置完成之后,下面深入了解Eclipse Helios 3.6.x的“优化” eclipse.ini设置文件:

  • 基于运行时选项
  • 并使用7月27日发布的Sun-Oracle JVM 1.6u21 b7 一些Sun专有的选项可能会涉及到 )。

通过“优化”,我的意思是能够在我们蹩脚的工作站上运行一个完整的Eclipse,一些从2002年开始使用2Go RAM和XPSp3的旧P4,但是我也在Windows7上testing了这些相同的设置

的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调整到您select的外部目录。
看到这个答案 。 这个想法是能够独立于任何Eclipse安装而将新插件放入目录中。

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


可怕的Oracle JVM 1.6u21(预编译版本7)和Eclipse崩溃

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

最后 解决scheme在Eclipse Wiki上 ,而在Windows上使用6u21预编译版本7的Helios

  • 下载固定的eclipse_1308.dll (2010年7月16日)
  • 并把它放进去
 (ECLIPSE_HOME)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503

而已。 没有设置来调整这里(再次,只有对于6u21预编译7的 Windows上的Helios)。
对于非Windows平台,您需要恢复到Sun专有选项-XX:MaxPermSize

这个问题基于一个回归: 由于java.exe中的Oracle重新 标记 导致JVM识别失败 ,并触发了Eclipse上的错误319514 。
安德鲁照顾错误320005 – [启动] --launcher.XXMaxPermSize: isSunVM应该为Oracle返回true ,但这将只为Helios 3.6.1。
另一个Eclipse提交者Francis Upton 反映了所有情况 。

7月27日更新u21b7
甲骨文已经回应了下一个Java 6版本的变化,直到JDK 7才会再次实施
如果使用jdk6u21 build 7 ,则可以恢复到--launcher.XXMaxPermSize (eclipse选项),而不是-XX:MaxPermSize (非标准选项)。
在C启动程序shim eclipse.exe发生的自动检测仍然会查找“ Sun Microsystems ”string,但使用6u21b7,现在它将再次工作。

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


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

与以前的设置相反,这些模块的确切path不再设置,这是方便的,因为它可以在不同的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。
请参阅此处以及官方的“ Java热点”选项页面中的所有JVM选项 。
注意: 这些选项的详细列表报告了UseFastAccessorMethods默认情况下可能处于活动状态。

另请参阅“更新您的JVM” :

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


在Eclipse中从命令行打开文件

请参阅Andrew Niefer的博客文章 ,报告这个新的选项:

 --launcher.defaultAction openFile 

这告诉启动程序,如果使用只包含不以“ - ”开头的参数的命令行调用它,那么这些参数应该被视为跟在“ – --launcher.openFile ”之后。

 eclipse myFile.txt 

当你双击一个与eclipse关联的文件,或者select文件并select“ Open With ”或“ Send To ”Eclipse时,这是启动器在Windows上接收的那种命令行。

首先针对当前工作目录parsing相对path ,然后针对eclipse程序目录。

请参阅bug 301033以供参考。 最初的错误4922 (2001年10月,9年后固定)。


p2和无符号对话提示符

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

替代文字

,join你的eclipse.ini

 -Declipse.p2.unsignedPolicy=allow 

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

我想说的是,安全研究支持这样一个事实,即less提示更好。
人们忽视了他们想要完成的事情stream出的东西。

对于3.6,我们不应该在stream程中popup警告 – 不pipe我们简化多less,人们会忽略它们。
相反,我们应该收集所有问题,不要安装那些有问题的软件包,而是把用户带回到他们可以修复的工作stream程中 – 增加信任,更松散地configuration安全策略等。这就是所谓的“安全分期“

———- http://www.eclipse.org/home/categorieshttp://img.dovov.comwiki.gif 替代文字http://www.eclipse.org/home/categorieshttp://img.dovov.comwiki.gif 替代文字http://www.eclipse.org/home/categorieshttp://img.dovov.comwiki.gif

其他选项

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


Windows7上的`user.home`问题

当eclipse启动时,它会读取它的keystore文件(保存密码的地方),一个位于user.home的文件。
如果由于某种原因, user.home不能正确parsing为全path,Eclipse将不会启动。
最初在这个SO问题中提出 ,如果你遇到这个问题,你需要重新定义keystore文件到一个显式的path(没有更多的user.home在开始时解决)

添加你的eclipse.ini

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

这已经被错误300577跟踪,它已经解决在这个其他SO问题 。


debugging模式

等一下,Eclipse中有多个设置文件。
如果你添加到你的eclipse.ini选项:

 -debug 

,则启用debugging模式 ,Eclipse将查找另一个设置文件:一个.options文件,您可以在其中指定一些OSGI选项。
当通过dropins文件夹添加新插件时,这非常棒。
添加.options文件中的以下设置,如本博客“ Dropins诊断 ”中所述 :

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

P2会通知你在dropins/文件夹中find了哪些软件包,产生了什么请求,以及安装计划是什么。 也许这并不是什么实际发生的事情的详细解释,什么地方出了问题,但它应该给你关于从哪里开始的强有力的信息:

  • 是你的计划中的捆绑?
  • 是不是安装问题(P2故障)
  • 或者它可能只是包括你的function不是最佳?

来自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 

这是一个有问题的configuration,因为OCL依赖于缺less的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

哪里错误标记?


清单类path

看到这个博客文章 :

  • 在Galileo(也就是Eclipse 3.5)中,JDT开始在添加到项目构buildpath的库中parsing清单类path。 无论该库是直接添加到项目的构buildpath,还是通过类path容器(如JDT提供的用户库工具或第三方实现的用户库工具)都可以工作。
  • 在Helios中,此行为已被更改为从清单类pathparsing中排除类path容器。

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

 -DresolveReferencedLibrariesForContainers=true 

请参阅错误305037 , 错误313965和错误313890的参考。


IPV4堆栈

这个SO问题在没有访问插件更新站点时提到了一个可能的修正:

 -Djava.net.preferIPv4Stack=true 

这里提到,以防万一它可以帮助你的configuration。


JVM1.7×64潜在的优化

本文报道:

为了logging,迄今为止我在1.7 x64 JVM n Windows上进行的台式testing中发现的最快选项是:

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

但是我仍然在努力

Eclipse伽利略3.5和3.5.1设置

目前(2009年11月),我使用jdk6 update 17testing了以下configuration选项集(Galileo – eclipse 3.5.x,请参阅3.4或更高版本的Helios 3.6.x ):
(当然,将eclipse.ini中的相对path调整为正确的path)

注意:对于eclipse3.5 ,用下面的代码replacestartuplauncher.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选项。
  • 伽利略支持完整的工作空间或虚拟机的相对path(避免修改那些从一个Eclipse安装到另一个,当然,如果你的JVM和工作区保持不变)
    之前,这些相对path在日食发射时不断被改写成绝对path。
  • 您也可以将Eclipse JDK安装的JRE目录复制到eclipse目录中

注意事项

有一个实际上与JDK相关的忽略断点的错误。
请使用JDK6u16或更新的版本来启动 eclipse(然后,您可以 eclipse中定义多个您想要编译的JDK:这不是因为您使用JDK6启动eclipse,您必须使用相同的JDK进行编译)。

马克斯

请注意使用:

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

正如Eclipse Wiki中所logging的,

Eclipse 3.3支持启动器的新参数:– --launcher.XXMaxPermSize
如果正在使用的VM是Sun VM,并且尚未有-XX:MaxPermSize= VM参数,则启动程序将自动将-XX:MaxPermSize=256m添加到正在使用的VM参数列表中。
3.3启动程序只能在Windows上识别Sun虚拟机。

如在此条目中所详述:

并非所有的vms都接受-XX:MaxPermSize参数,这就是为什么它以这种方式传递的原因。 可能(或可能不)存在识别sun vms的问题。
注意:Eclipse 3.3.1有一个bug ,启动程序无法检测到Sun VM,因此没有使用正确的PermGen大小。 看来这也可能是Mac OS X上3.3.0的一个已知的bug 。
如果您正在使用这些平台组合中的任何一种,请按照上文所述将-XX标志添加到eclipse.ini中。

笔记:

  • 384m ”行转换为VM参数的“ =384m ”部分,如果VM在“ m ”上区分大小写,那么这个参数也是如此。
  • --launcher. ”前缀,它指定参数被启动程序本身消耗,并被添加到启动程序特定的参数,以避免名称与应用程序参数冲突。 (其他示例是 – --launcher.library ,– --launcher.suppressErrors

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

Eclipse Ganymede 3.4.2设置


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


JDK

在我看来,最好的JVM设置总是包含你可以find最新的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 

正如前面关于内存消耗的问题所说的那样 。

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

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

-showlocation

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

Eclipse 3.6添加了一个首选项选项来指定要显示的Workspace name (shown in window title)显示什么,比起-showlocation ,这有三个原因:

  1. 你不需要重启eclipse就可以生效。
  2. 你可以select一个简短的代码。
  3. 它首先出现在视angular和应用名称之前。

如果你打算使用jdk6更新14,我build议使用使用G1垃圾回收器,这似乎有助于性能。

为此,请删除这些设置:

-XX:+ UseConcMarkSweepGC
-XX:+ CMSIncrementalMode
-XX:+ CMSIncrementalPacing

并用这些replace它们:

-XX:+ UnlockExperimentalVMOptions
-XX:+ UseG1GC

如果您正在使用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上正常工作

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

可以设置一个暂停时间目标(毫秒),以避免长时间的停顿拖延用户界面。

 -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工具套件监视,configuration和查找应用程序中的内存泄漏。 您从此更新站点下载插件。 请注意,只适用于Eclipse 3.3和Eclipse 3.4

这是我自己的设置,用于运行在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相同
 -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

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

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

如果你像我一样,并且在当前Oracle版本1.6中遇到问题,那么你可能想要更新你的JDK或者set

  -XX:MaxPermSize参数 

。 有关更多信息,请访问: http : //java.dzone.com/articles/latest-java-update-fixes

XX:+ UseParallelGC这是有史以来最棒的select!

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

指定使用哪个Java版本,并使用dll而不是启动javaw进程

这是我使用的(尽pipe我有他们在快捷方式而不是设置文件):

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