Eclipse的最佳JVM设置是什么?

您为运行Eclipse找到的最佳JVM设置是什么?

537652 次浏览

以下是我使用的方法(尽管我在快捷方式而不是设置文件中使用了它们):

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

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

< p > vm < br > C:\Program Files\Java\ jdk1.6.0_07 \ jre \ bin \ client \ jvm.dll < / p >

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

-showlocation

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

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

  1. 不需要重新启动eclipse即可使其生效。
  2. 你可以选择一个短代码。
  3. 它出现在透视图和应用程序名称之前。

Eclipse Ganymede 3.4.2设置


有关最近的设置,请参见以上Eclipse Galileo 3.5设置


JDK

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

正如在上一个关于内存消耗的问题中所说的。

如果你使用的是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上运行得很好

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

要做到这一点,删除这些设置:

< p > - xx: + UseConcMarkSweepGC
- xx: + CMSIncrementalMode
- xx: + CMSIncrementalPacing
< / p >

然后用这些替换它们:

< p > - xx: + UnlockExperimentalVMOptions
- xx: + UseG1GC < / p >

Eclipse Galileo 3.5和3.5.1设置

目前(2009年11月),我正在用jdk6更新17测试以下配置选项集(使用Galileo—eclipse 3.5)。x,参见下面是3.4太阳神3.6.x):
(当然,将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

更多信息请参见my 以上原始答案

变更(2009年7月起)

  • 指的是启动器而不是框架
  • 共享插件:org.eclipse.equinox.p2.reconciler.dropins.directory选项。
  • Galileo完全支持工作空间或VM的相对路径(当然,如果您的JVM和工作空间保持不变,则避免从一个eclipse安装到另一个eclipse安装时修改这些路径) 在此之前,当eclipse启动自身时,这些相对路径一直被重写为绝对路径…
  • 您还可以将Java JDK安装的JRE目录复制到eclipse目录中

警告

There is a bug with < >强忽略断点< / >强实际上与JDK有关 使用JDK6u16或最新版本的启动 eclipse(然后你可以定义任意数量的JDK来编译 eclipse:并不是因为你使用JDK6启动了一个eclipse,所以你必须使用相同的JDK来编译)

马克斯

注意用法:

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

Eclipse维基中所述,

Eclipse 3.3支持启动器的一个新参数:--launcher.XXMaxPermSize 如果正在使用的VM是Sun VM,并且还没有-XX:MaxPermSize= VM参数,那么启动器将自动将-XX:MaxPermSize=256m添加到正在使用的VM参数列表中 3.3启动器只能识别Windows上的Sun虚拟机

这个条目所述:

不是所有的虚拟机都接受-XX:MaxPermSize参数,这就是为什么以这种方式传递它。在识别sun虚拟机时可能存在(也可能不存在)问题 注意:Eclipse 3.3.1有一个错误,其中启动器无法检测到Sun VM,因此没有使用正确的永久生成大小。这似乎也是Mac OS X 3.3.0版本的已知bug
如果你正在使用这些平台组合中的任何一个,就像上面描述的那样在eclipse.ini中添加-XX标志

注:

  • 384m”行转换为VM参数的“=384m”部分,如果VM对“m”区分大小写,则此参数为so。
  • --launcher.”前缀,这指定参数被启动程序本身使用,并被添加到启动程序特定的参数中,以避免与应用程序参数的名称冲突。(其他的例子有--launcher.library--launcher.suppressErrors)

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

XX:+UseParallelGC,这是有史以来最棒的选择!!

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

可以设置一个暂停时间目标(ms)来避免长时间的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任务控制工具套件监视、分析和查找应用程序中的内存泄漏。你从这个更新站点下载插件。注意,仅适用于Eclipse 3.3和Eclipse 3.4

又到了每年的这个时候:“eclipse.ini take 3”设置反击!

Eclipse Helios 3.6和3.6。x设置

alt text 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 .ini设置文件的深入了解:

(所谓“优化”,我的意思是能够在我们蹩脚的工作机上运行一个完整的Eclipse,一些2002年的老式P4,带有2Go RAM和XPSp3。但我也在Windows7上测试了同样的设置)

Eclipse.ini

alt text

警告:对于非windows平台,使用Sun专有选项-XX:MaxPermSize而不是Eclipse专有选项--launcher.XXMaxPermSize 也就是说:除非你正在使用最新的Jdk6u21构建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
< p >注意:< br > 将p2.reconciler.dropins.directory调整为您选择的外部目录 请看这个所以回答。 其思想是能够将新插件放置在独立于任何Eclipse安装的目录中

下面几节详细介绍了这个eclipse.ini文件中的内容。


可怕的Oracle JVM 1.6u21(预构建7)和Eclipse崩溃

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

最后解决方案在Eclipse维基上,并且只在在Windows上的Helios 6u21 pre build 7上:

(eclipse_home)/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
< p >就是这样。这里没有需要调整的设置(同样,仅适用于带有6u21预构建7的Helios 在Windows上) 对于非windows平台,您需要恢复到Sun专有选项-XX:MaxPermSize.

该问题是基于一个回归:由于Oracle在java.exe中重命名,JVM识别失败,并在Eclipse上触发了错误319514 Andrew处理了Bug 320005 - [launcher] --launcher.XXMaxPermSize: isSunVM对于Oracle应该返回true,但这只适用于Helios 3.6.1 弗朗西斯·厄普顿,另一个Eclipse提交者,反思所有的情况.

< p > 7月27日u21b7更新: < br > Oracle已经在下一个Java 6版本中回归了这个变化,并且在JDK 7之前不会再次实现它。< br > 如果你使用jdk6u21 build 7,你可以恢复到--launcher.XXMaxPermSize (eclipse选项)而不是-XX:MaxPermSize(非标准选项) 自动检测发生在C发射器垫片eclipse.exe仍将查找"Sun Microsystems"字符串,但对于6u21b7,它现在将再次工作

目前,我仍然保留-XX:MaxPermSize版本(因为我不知道大家什么时候会启动eclipse 正确的 JDK)。


隐式的' -startup '和'——launcher.library '

与前面的设置相反,不再设置这些模块的确切路径,这很方便,因为它可以在不同的Eclipse 3.6之间变化。x版本:

  • startup:如果未指定,可执行文件将在plugins目录中查找具有最高版本的org.eclipse.equinox.launcher包。
  • 发射器。library:如果未指定,可执行文件将在plugins目录中查找具有最高版本的适当org.eclipse.equinox.launcher.[platform]片段,并在其中使用名为eclipse_*的共享库。

使用JDK6

现在启动Eclipse显式地需要JDK6:

-Dosgi.requiredJavaVersion = 1.6

这个所以问题报告了在Mac OS上开发的积极发生率。


+ UnlockExperimentalVMOptions

以下选项是Sun JVM的一些实验性选项的一部分。

-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseFastAccessorMethods

他们已经在这个博客报告潜在地加速Eclipse 查看所有JVM选项和官方Java热点选项页面.
注意:这些选项的详细列表报告默认情况下UseFastAccessorMethods可能是活动的。< / p >

另见“更新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和Unsigned对话框提示符

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

alt text

,在你的eclipse.ini中添加:

-Declipse.p2.unsignedPolicy=allow

请看克里斯Aniszczy中的博客,以及错误报告235526. c。

我确实想说安全研究支持这样一个事实,提示越少越好 人们会忽略在他们想要完成的事情中突然出现的事情 对于3.6,我们不应该在流程中间弹出警告——无论我们如何简化,人们还是会忽略它们 相反,我们应该收集所有的问题,安装那些有问题的包,而不是把用户带回工作流中的一个点,在那里他们可以修复-添加信任,配置更宽松的安全策略,等等。这被称为'安全分期'.

__abc0 __abc1 __abc1

附加选项

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


“用户。Windows7上的home '问题

当eclipse启动时,它将读取它的keystore文件(保存密码的地方),该文件位于user.home中 如果由于某种原因user.home没有正确地解析自己到一个完整的路径,Eclipse将不会启动 最初在这个SO问题中引发,如果遇到这种情况,则需要将密钥库文件重新定义为显式路径(不再有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]无法诊断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
这是一个有问题的配置,因为OCL依赖于EMF,这是缺失的 3.5M5不能诊断此问题 < br > < p >启动eclipse。 没有明显的问题。

.错误日志
  • 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中,此行为被更改为从manifest类路径解析中排除类路径容器。

这意味着你的一些项目可能不再在Helios编译 如果您想恢复到Galileo行为,添加:

-DresolveReferencedLibrariesForContainers=true

参考错误305037错误313965错误313890


IPV4堆栈

当无法访问插件更新站点时,所以问题提到了一个潜在的修复:

-Djava.net.preferIPv4Stack=true

这里提到的只是以防它对您的配置有帮助。


JVM1.7x64潜在的优化

这篇文章报告:

为了记录,到目前为止,我在1.7 x64 JVM n Windows的台架测试中发现的最快的选项是:

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

但我仍在努力……

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

如果你和我一样,对当前的Oracle 1.6版本有问题,那么你可能想要更新JDK或设置

- xx: MaxPermSize
。更多信息可在这里:http://java.dzone.com/articles/latest-java-update-fixes

下面是我自己在i7 2630M 16GB内存笔记本电脑上运行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
< p >计算: 对于win7 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

Eclipse Indigo 3.7.2设置(64位linux)

在x86-64 Linux上运行的Sun / Oracle java version "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"的限制

这些标志的主要优化目标是在所有情况下尽量减少延迟,作为次要优化目标,最大限度地减少内存使用。