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 ,用下面的代码replacestartup
和launcher.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
,这有三个原因:
- 你不需要重启eclipse就可以生效。
- 你可以select一个简短的代码。
- 它首先出现在视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