315

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

4

16 回答 16

315

又是一年中的那个时候:“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.xEclipse Galileo 3.5.x进行设置后,下面是对 Eclipse Helios 3.6.x 的“优化” eclipse.ini设置文件的深入了解:

通过“优化”,我的意思是能够在我们糟糕的工作工作站上运行完整的 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_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.exeSun 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

这已由错误 300577跟踪,已在其他 SO 问题中解决。


调试模式

等等,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 / Configurationdetails 没有(诊断)提及 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 

但我仍在努力...

于 2010-07-18T13:23:15.617 回答
76

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,将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 的完全相对路径(避免必须从一个 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" 行转换为=384mVM 参数的 " " 部分,如果 VM 在 " " 上区分大小写m,则此参数也是如此。
  • --launcher.”前缀,这指定参数由启动器本身使用,并被添加到启动器特定的参数中,以避免与应用程序参数的名称冲突。(其他例子是--launcher.library, --launcher.suppressErrors

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

于 2009-09-11T08:01:17.657 回答
63

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

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

于 2008-09-27T20:00:18.573 回答
20

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

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

于 2011-10-19T13:36:23.067 回答
14

-演出地点

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

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

  1. 您无需重新启动 eclipse 即可生效。
  2. 您可以选择一个短代码。
  3. 它首先出现在透视图和应用程序名称之前。
于 2008-09-27T00:22:17.703 回答
9

如果您使用的是 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 上运行良好

于 2008-12-14T03:13:35.010 回答
9

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

为此,请删除以下设置:

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

并用这些替换它们:

-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC

于 2009-07-07T19:58:42.567 回答
7

您也可以尝试使用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

于 2009-12-03T06:20:32.547 回答
5

这是我自己在 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
于 2011-09-23T03:11:19.037 回答
5
-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

于 2011-10-15T07:59:01.277 回答
4

我自己的设置(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
于 2010-07-18T17:46:55.370 回答
3

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

于 2008-09-27T00:14:53.073 回答
3

如果您像我一样对当前的 Oracle 1.6 版本有疑问,那么您可能需要更新您的 JDK 或设置

-XX:MaxPermSize
. 更多信息可在此处获得:http: //java.dzone.com/articles/latest-java-update-fixes

于 2010-07-28T16:12:59.390 回答
2

XX:+UseParallelGC 这是最棒的选择!!!

于 2009-10-07T04:07:50.147 回答
1

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

指定您使用的 java 版本,并使用 dll 而不是启动 javaw 进程

于 2008-09-27T00:21:12.073 回答
0

这是我使用的(尽管我将它们放在快捷方式而不是设置文件中):

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

于 2008-09-26T22:38:43.817 回答