您发现运行 Eclipse 的最佳 JVM 设置是什么?
16 回答
又是一年中的那个时候:“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.x进行设置后,下面是对 Eclipse Helios 3.6.x 的“优化” eclipse.ini设置文件的深入了解:
- 基于运行时选项,
- 并使用7 月 27 日发布的Sun-Oracle JVM 1.6u21 b7 (
可能涉及一些 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.directory
您选择的外部目录。
看到这个答案。这个想法是能够独立于任何 Eclipse 安装将新插件放到一个目录中。
以下部分详细介绍了此eclipse.ini
文件中的内容。
可怕的 Oracle JVM 1.6u21(pre build 7)和 Eclipse 崩溃
Andrew Niefer确实提醒了我这种情况,并写了一篇博客文章,关于非标准 vm 参数 ( -XX:MaxPermSize
) 并可能导致其他供应商的 vm 根本无法启动。
但是该选项 ( --launcher.XXMaxPermSize
) 的 eclipse 版本不适用于新的 JDK(6u21,除非您使用的是 6u21 build 7,请参见下文)。
这最终的解决方案在Eclipse Wiki上,对于带有 6u21 pre build 7 的 Windows 上的 Helios:
- 下载修复的eclipse_1308.dll(2010 年 7 月 16 日)
- 并将其放入
(eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
就是这样。此处无需调整设置(同样,仅适用于具有6u21 pre build 7的Windows上的 Helios )。
对于非 Windows 平台,您需要恢复为 Sun 专有选项。-XX:MaxPermSize
该问题基于一个回归:由于 java.exe 中的 Oracle 更名,JVM 识别失败,并在 Eclipse 上触发了错误 319514。
Andrew 处理了Bug 320005 - [launcher]--launcher.XXMaxPermSize: isSunVM
应该为 Oracle 返回 true,但这仅适用于 Helios 3.6.1。另一位 Eclipse 提交
者 Francis Upton对所有情况进行了反思。
更新 u21b7,7 月 27 日:
Oracle 已经退回了对下一个 Java 6 版本的更改,并且在 JDK 7 之前不会再次实施。
如果您使用jdk6u21 build 7,则可以恢复为--launcher.XXMaxPermSize
(eclipse 选项)而不是-XX:MaxPermSize
(非标准选项)。C 启动器 shim 中发生
的自动检测仍会查找“ ”字符串,但使用 6u21b7,它现在可以工作了 - 再次。eclipse.exe
Sun Microsystems
目前,我仍然保留该-XX:MaxPermSize
版本(因为我不知道每个人何时会启动 Eclipse正确的JDK)。
隐式 `-startup` 和 `--launcher.library`
与之前的设置相反,这些模块的确切路径不再设置,这很方便,因为它可以在不同的 Eclipse 3.6.x 版本之间有所不同:
- 启动:如果未指定,可执行文件将在插件目录中查找
org.eclipse.equinox.launcher
具有最高版本的包。 - launcher.library:如果未指定,可执行文件在
plugins
目录中查找具有最高版本的适当org.eclipse.equinox.launcher.[platform]
片段并使用eclipse_*
内部命名的共享库。
使用JDK6
现在明确需要 JDK6 来启动 Eclipse:
-Dosgi.requiredJavaVersion = 1.6
这个SO question报告了在 Mac OS 上开发的积极发生率。
+UnlockExperimentalVMOptions
以下选项是 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 关联的文件,或者选择文件并选择“
Open With
”或“Send To
”Eclipse 时,这是启动器将在 Windows 上接收的命令行类型。相对路径将首先针对当前工作目录解析,然后针对 eclipse 程序目录解析。
请参阅错误 301033以供参考。最初是错误 4922(2001 年 10 月,9 年后修复)。
p2 和未签名的对话框提示
如果您在安装许多插件期间厌倦了这个对话框:
,添加你的eclipse.ini
:
-Declipse.p2.unsignedPolicy=allow
请参阅Chris Aniszczy的这篇博文和错误报告 235526。
我确实想说,安全研究支持这样一个事实,即提示越少越好。
人们会忽略他们想要完成的事情中突然出现的事情。对于 3.6,我们不应该在流程中间弹出警告——无论我们多么简化,人们都会忽略它们。
相反,我们应该收集所有问题,不要安装有问题的捆绑包,而是将用户带回到工作流程中他们可以修复的点 - 添加信任,更松散地配置安全策略等。这称为“安全”分期'。
---------- http://www.eclipse.org/home/categories/images/wiki.gif 替代文本 http://www.eclipse.org/home/categories/images/wiki.gif 替代文字 http://www.eclipse.org/home/categories/images/wiki.gif
其他选项
这些选项不直接在eclipse.ini
上面,但如果需要可以派上用场。
Windows7 上的 `user.home` 问题
当 Eclipse 启动时,它将读取其密钥库文件(保存密码的地方),该文件位于user.home
.
如果由于某种原因user.home
无法正确解析为完整路径,则 Eclipse 将不会启动。
最初在这个 SO question中提出,如果您遇到这种情况,您需要将密钥库文件重新定义为显式路径(开始时不再需要 user.home 来解决)
添加你的eclipse.ini
:
-eclipse.keyring
C:\eclipse\keyring.txt
调试模式
等等,Eclipse 中有不止一个设置文件。
如果您添加到您eclipse.ini
的选项:
-debug
,您启用调试模式,Eclipse 将寻找另一个设置文件:.options
您可以在其中指定一些 OSGI 选项的文件。
当您通过 dropins 文件夹添加新插件时,这非常棒。
在您的 .options 文件中添加以下设置,如本博文“ Dropins 诊断”中所述:
org.eclipse.equinox.p2.core/debug=true
org.eclipse.equinox.p2.core/reconciler=true
P2 将通知您在
dropins/
文件夹中找到了哪些捆绑包、生成了哪些请求以及安装计划是什么。也许它不是对实际发生的事情和出了什么问题的详细解释,但它应该为您提供有关从哪里开始的强有力信息:
- 你的套餐在计划中吗?
- 是否是安装问题(P2 故障)
- 或者也许包含您的功能并不是最佳选择?
这来自Bug 264924 - [reconciler] No diagnostic of dropins questions,最终解决了以下问题:
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
details 没有(诊断)提及org.eclipse.ocl
.Help / Installation / Information Installed Software
没有提及org.eclipse.ocl
。漂亮的错误标记在哪里?
清单类路径
请参阅此博客文章:
- 在 Galileo(又名 Eclipse 3.5)中,JDT 开始解析添加到项目构建路径的库中的清单类路径。无论是直接将库添加到项目的构建路径还是通过类路径容器(例如 JDT 提供的用户库工具或第三方实现的用户库工具),这都有效。
- 在 Helios 中,此行为已更改为从清单类路径解析中排除类路径容器。
这意味着您的某些项目可能不再在 Helios 中编译。
如果要恢复到 Galileo 行为,请添加:
-DresolveReferencedLibrariesForContainers=true
有关参考,请参阅错误 305037、错误 313965和错误 313890。
IPV4 堆栈
这个SO question提到了在不访问插件更新站点时的潜在修复:
-Djava.net.preferIPv4Stack=true
此处提及以防万一它对您的配置有所帮助。
JVM1.7x64 潜在优化
本文报道:
作为记录,到目前为止,我在 1.7 x64 JVM n Windows 的基准测试中发现的最快的选项是:
-Xincgc
-XX:-DontCompileHugeMethods
-XX:MaxInlineSize=1024
-XX:FreqInlineSize=1024
但我仍在努力...
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
行替换为:
-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 的完全相对路径(避免必须从一个 eclipse 安装修改到另一个,当然,如果您的 JVM 和工作空间保持不变)
之前,当 eclipse 启动时,这些相对路径不断被重写为绝对路径... - 您还可以在 eclipse 目录中复制 Java JDK 安装的 JRE 目录
注意事项
存在与 JDK 相关的忽略断点的错误。
一定要使用 JDK6u16 或更新版本来启动eclipse(然后您可以定义要在eclipse 中编译的任意数量的 JDK:这并不是因为您使用 JDK6 启动 eclipse,所以您必须使用相同的 JDK 进行编译)。
最大限度
注意以下用法:
--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 VM。
如本条目所述:
并非所有 vm 都接受
-XX:MaxPermSize
以这种方式传递的参数。识别 sun vm 可能存在(也可能不存在)问题。
注意:Eclipse 3.3.1 有一个错误,启动器无法检测到 Sun VM,因此没有使用正确的 PermGen 大小。这似乎也是Mac OS X 3.3.0 上的一个已知错误。
如果您使用这些平台组合中的任何一个,请按上述方式将-XX
标志添加到eclipse.ini
。笔记:
- "
384m
" 行转换为=384m
VM 参数的 " " 部分,如果 VM 在 " " 上区分大小写m
,则此参数也是如此。- “
--launcher.
”前缀,这指定参数由启动器本身使用,并被添加到启动器特定的参数中,以避免与应用程序参数的名称冲突。(其他例子是--launcher.library
,--launcher.suppressErrors
)该
-vmargs -XX:MaxPermSize=384m
部分是直接传递给 VM 的参数,完全绕过启动器,并且不使用对 VM 供应商的检查。
Eclipse Ganymede 3.4.2 设置
有关更多最新设置,请参阅上面的 Eclipse Galileo 3.5 设置。
JDK
在我看来,最好的 JVM 设置总是包括你能找到的最新的 JDK(所以现在 jdk1.6.0_b07 到 b16,除了 b14 和 b15)
日食.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”限制。
这些标志的主要优化目标是在所有情况下最小化延迟,并作为次要优化目标最小化内存使用量。
-演出地点
为了更容易让 eclipse 运行两次,并知道你正在处理哪个工作区
Eclipse 3.6 添加了一个首选项选项来指定要显示的内容,这比三个原因Workspace name (shown in window title)
要好得多:-showlocation
- 您无需重新启动 eclipse 即可生效。
- 您可以选择一个短代码。
- 它首先出现在透视图和应用程序名称之前。
如果您使用的是 Linux + Sun JDK/JRE 32bits,请将“-vm”更改为:
-vm
[your_jdk_folder]/jre/lib/i386/client/libjvm.so
如果您使用的是 Linux + Sun JDK/JRE 64bits,请将“-vm”更改为:
-vm
[your_jdk_folder]/jre/lib/amd64/server/libjvm.so
这对我来说在 Ubuntu 8.10 和 9.04 上运行良好
如果您要使用 jdk6 update 14,我建议使用 G1 垃圾收集器,这似乎有助于提高性能。
为此,请删除以下设置:
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
并用这些替换它们:
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
您也可以尝试使用JRockit运行。它是针对服务器优化的 JVM,但许多长时间运行的客户端应用程序,如 IDE,在 JRockit 上运行得非常好。Eclipse 也不例外。JRockit 没有永久空间,因此您不需要配置它。
可以设置一个暂停时间目标(毫秒)以避免长时间 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 Mission Control 工具套件监控、分析和查找应用程序中的内存泄漏。您从这个更新站点下载插件。注意,仅适用于 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。至少使用 -Xmx512M。更多,如果有的话。
如果您像我一样对当前的 Oracle 1.6 版本有疑问,那么您可能需要更新您的 JDK 或设置
-XX:MaxPermSize. 更多信息可在此处获得:http: //java.dzone.com/articles/latest-java-update-fixes
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