What are the best JVM settings for Eclipse?
您在运行Eclipse时找到的最佳JVM设置是什么?
这是一年中的时间:"eclipse.ini取3"设置反击! sub>
Eclipse Helios 3.6和3.6.x设置
alt text 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设置文件:
(通过"优化",我的意思是能够在我们糟糕的工作站上运行一个完整的Eclipse,从2002年开始使用2Go RAM和XPSp3。但我也在Windows7上测试了相同的设置)
的eclipse.ini
警告:对于非Windows平台,请使用Sun专有选项
那就是:除非你使用最新的jdk6u21 build 7。
请参阅下面的Oracle部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | -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 |
注意:
将
看到这个答案。
我们的想法是能够独立于任何Eclipse安装将新插件放在目录中。
以下部分详细介绍了此
可怕的Oracle JVM 1.6u21(pre build 7)和Eclipse崩溃
Andrew Niefer确实提醒我这种情况,写了一篇关于非标准vm参数(
但是该选项(
final del>解决方案位于Eclipse Wiki上,而Windows上的Helios解决方案仅限于6u21 pre build 7:
1 | (eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503 |
而已。没有设置在这里调整(再次,仅适用于Windows上的Helios,具有6u21预构建7)。
对于非Windows平台,您需要恢复到Sun专有选项
该问题基于一个回归:由于java.exe中的Oracle重新命名导致JVM识别失败,并在Eclipse上触发了错误319514。
Andrew负责Bug 320005 - [launcher]
另一位Eclipse提交者Francis Upton对所有情况进行了反思。
7月27日更新u21b7:
Oracle已经对下一个Java 6版本的变化做了回归,并且在JDK 7之前不会再次实现它。
如果使用jdk6u21 build 7,则可以恢复为
C启动器shim
现在,我仍然保留
隐式`-startup`和`--launcher.library`
与之前的设置相反,这些模块的确切路径不再设置,这很方便,因为它可以在不同的Eclipse 3.6.x版本之间变化:
使用JDK6
现在显式需要JDK6来启动Eclipse:
1 | -Dosgi.requiredJavaVersion = 1.6 |
这个SO问题报告了在Mac OS上发展的积极事件。
+ UnlockExperimentalVMOptions
以下选项是Sun JVM的一些实验选项的一部分。
1 2 3 | -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:+UseFastAccessorMethods |
在这篇博客文章中已经报道了它们可能加速Eclipse。
查看此处的所有JVM选项以及官方Java Hotspot选项页面。
注意:这些选项的详细列表报告
另请参阅"更新JVM":
As a reminder, G1 is the new garbage collector in preparation for the JDK 7, but already used in the version 6 release from u17.
Ok.
从命令行打开Eclipse中的文件
请参阅Andrew Niefer的博客文章报告此新选项:
1 2 | --launcher.defaultAction openFile |
This tells the launcher that if it is called with a command line that only contains arguments that don't start with"
- ", then those arguments should be treated as if they followed"--launcher.openFile ".Ok.
1 | eclipse myFile.txt |
This is the kind of command line the launcher will receive on windows when you double click a file that is associated with eclipse, or you select files and choose"
Open With " or"Send To " Eclipse.Ok.
Relative paths will be resolved first against the current working directory, and second against the eclipse program directory.
Ok.
请参阅错误301033以供参考。最初的错误4922(2001年10月,9年后修复)。
p2和Unsigned Dialog Prompt
如果您在安装许多插件时厌倦了此对话框:
,添加
1 | -Declipse.p2.unsignedPolicy=allow |
请参阅Chris Aniszczy的博客文章和错误报告235526。
我想说安全研究支持这样一个事实,即提示越少越好。
人们忽视了他们想要完成的事情中出现的事情。对于3.6,我们不应该在流程中间弹出警告 - 无论我们简化多少,人们都会忽略它们。
相反,我们应该收集所有问题,不要安装那些有问题的软件包,而是让用户回到工作流程中可以修复的位置 - 添加信任,更松散地配置安全策略等。这称为'安全分期"。BLOCKQUOTE>
---------- 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
其他选项
这些选项不直接在上面的
eclipse.ini 中,但如果需要可以派上用场。Windows7上的`user.home`问题
当eclipse启动时,它将读取其密钥库文件(保存密码),该文件位于
user.home 中。
如果由于某种原因user.home 无法正确解析为完整的路径,Eclipse将无法启动。
最初在此SO问题中提出,如果您遇到此问题,则需要将密钥库文件重新定义为显式路径(不再需要user.home在开始时解析)添加
eclipse.ini :
1
2 -eclipse.keyring
C:\eclipse\keyring.txt这已经被错误300577跟踪,它已经解决了这个其他的SO问题。
调试模式
等等,Eclipse中有多个设置文件。
如果你添加到eclipse.ini 选项:
1 -debug,您启用调试模式,Eclipse将查找另一个设置文件:
.options 文件,您可以在其中指定一些OSGI选项。
当你通过dropins文件夹添加新的插件时,这很好。
在.options文件中添加以下设置,如本博文"Dropins diagnosis"中所述:
1
2 org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/reconciler=trueP2 will inform you what bundles were found in
dropins/ folder, what request was generated, and what is the plan of installation. Maybe it is not detailed explanation of what actually happened, and what went wrong, but it should give you strong information about where to start:Ok.
was your bundle in the plan? Was it installation problem (P2 fault) or maybe it is just not optimal to include your feature? Ok.
这来自Bug 264924 - [reconciler]没有对dropins问题的诊断,最终解决了以下问题:
1
2 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.0M5This is a problematic configuration since OCL depends on EMF which is missing.
3.5M5 provides no diagnosis of this problem.Ok.
Start eclipse.
No obvious problems. Nothing in Error Log.Ok.
Help / About / Plugin details showsorg.eclipse.ocl.doc , but notorg.eclipse.ocl .Help / About / Configuration details has no (diagnostic) mention of
org.eclipse.ocl .Help / Installation / Information Installed Software has no mention oforg.eclipse.ocl .Ok.
Where are the nice error markers?
Ok.
清单类路径
看到这篇博文:
In Galileo (aka Eclipse 3.5), JDT started resolving manifest classpath in libraries added to project’s build path. This worked whether the library was added to project’s build path directly or via a classpath container, such as the user library facility provided by JDT or one implemented by a third party. In Helios, this behavior was changed to exclude classpath containers from manifest classpath resolution. Ok.
这意味着您的某些项目可能无法再在Helios中编译。
如果要恢复为Galileo行为,请添加:
1 -DresolveReferencedLibrariesForContainers=true有关参考,请参阅错误305037,错误313965和错误313890。
IPV4堆栈
这个问题在没有访问插件更新站点时提到了一个潜在的修复:
1 -Djava.net.preferIPv4Stack=true这里提到以防万一它可以帮助您的配置。
JVM1.7x64潜在的优化
本文报道:
For the record, the very fastest options I have found so far for my bench test with the 1.7 x64 JVM n Windows are:
Ok.
1
2
3
4 -Xincgc
-XX:-DontCompileHugeMethods
-XX:MaxInlineSize=1024
-XX:FreqInlineSize=1024But I am still working on it...
Ok.
好。
Eclipse Galileo 3.5和3.5.1设置目前(2009年11月),我正在使用jdk6 update 17测试以下配置选项集(使用Galileo - eclipse 3.5.x,请参阅下面的Helios 3.6.x的3.4或更高版本):
(当然,将此eclipse.ini中存在的相对路径调整为您设置的正确路径)注意:对于eclipse3.5,将
startup 和launcher.library 行替换为:
1
2
3
4 -startup
plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519eclipse.ini 3.5.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 -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编译)。马克斯
注意用法:
1
2
3
4 --launcher.XXMaxPermSize
384m
-vmargs
-XX:MaxPermSize=128m如Eclipse Wiki中所述,
Eclipse 3.3 supports a new argument to the launcher:
--launcher.XXMaxPermSize .
If the VM being used is a Sun VM and there is not already a-XX:MaxPermSize= VM argument, then the launcher will automatically add-XX:MaxPermSize=256m to the list of VM arguments being used.
The 3.3 launcher is only capable of identifying Sun VMs on Windows.详情请参阅此条目:
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 theeclipse.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.
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。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 -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的博客文章。
监控
您还可以考虑启动:
1 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的设置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 -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"限制。这些标志的主要优化目标是在所有情况下最小化延迟,并且作为辅助优化目标最小化内存使用。
-showlocation
为了让eclipse更容易运行两次,并知道你正在处理哪个工作区
Eclipse 3.6添加了一个首选项选项,用于指定显示
Workspace name (shown in window title) 的内容,其效果比-showlocation 好得多,原因有三:你不需要重新启动eclipse才能生效。 您可以选择一个简短的代码。 它首先出现在透视图和应用程序名称之前。
如果您使用的是Linux + Sun JDK / JRE 32位,请将"-vm"更改为:
1
2 -vm
[your_jdk_folder]/jre/lib/i386/client/libjvm.so如果您使用的是Linux + Sun JDK / JRE 64位,请将"-vm"更改为:
1
2 -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:+ UnlockExperimentalVMOptions
-XX:+ UseG1GC
您也可以尝试使用JRockit运行。它是针对服务器优化的JVM,但许多长期运行的客户端应用程序(如IDE)在JRockit上运行良好。 Eclipse也不例外。 JRockit没有perm空间,因此您无需配置它。
可以设置暂停时间目标(ms)以避免长时间停止UI的gc暂停。
1
2
3
4
5
6
7 -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
这是我在i7 2630M 16GB RAM笔记本电脑上运行的Eclipse的设置,这个设置已经使用了一个星期,没有一次崩溃,Eclipse 3.7运行顺利。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 -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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 -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):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 -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或设置
1 -XX:MaxPermSize。有关更多信息,请访问:http://java.dzone.com/articles/latest-java-update-fixes
Eclipse喜欢大量的RAM。至少使用-Xmx512M。更多如果可用。
XX:+ UseParallelGC这是有史以来最棒的选择!
-vm
C: Program Files Java jdk1.6.0_07 jre bin client jvm.dll要指定您正在使用的Java版本,请使用dll而不是启动javaw进程
这是我使用的(虽然我在快捷方式而不是设置文件中有它们):
eclipse.exe -showlocation -vm"C: Java jdk1.6.0_07 bin javaw.exe"-vmargs -Xms256M -Xmx768M -XX:+ UseParallelGC -XX:MaxPermSize = 128M