如何降低Eclipse Ganymede的内存使用?

34

我使用最近的Eclipse Ganymede版,具体是针对Java EE和Web开发人员的版本。我安装了一些额外的插件(例如Subclipse,Spring,FindBugs),并删除了所有Mylyn插件。

在Eclipse中,我没有进行任何特别繁重的操作,比如启动应用程序服务器或连接到数据库,但出现了一个问题,几个小时后,我发现Eclipse使用了接近500MB的内存。

有人知道为什么Eclipse会使用这么多的内存(是否存在内存泄漏?),更重要的是,是否有什么方法可以改进这种情况呢?

13个回答

34

关于Eclipse我不太清楚,我使用的是IntelliJ,它也存在内存增长的问题(无论你是否在活跃地使用它!)。无论如何,在IntelliJ中,我无法消除这个问题,但我通过调整运行时VM选项减缓了内存增长。您可以尝试在Eclipse中重置这些选项,看看是否有所改善。

您可以在Eclipse文件夹中的eclipse.ini文件中编辑VM选项。

我发现(在IntelliJ中)垃圾收集器设置对内存增长速度影响最大。

我的设置为:

-Xms128m
-Xmx512m
-XX:MaxPermSize=120m
-XX:MaxGCPauseMillis=10
-XX:MaxHeapFreeRatio=70
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing

(请参见http://piotrga.wordpress.com/2006/12/12/intellij-and-garbage-collection/以了解各个设置的说明)。如您所见,我更关心编辑过程中避免长时间暂停,而不是实际内存使用量,但您可以将此作为起点。


1
你是我的英雄! 因此,我已经切换回欧罗巴,并使用这些设置使Ganymede飞起来了! - Yorgos Pagles
2
这比我预期的要有更大的影响(即使在更新的Eclipse版本中)。 - Brendan Long
经过查看了新的Sun和Oracle文档,我建议将"-XX:+UseConcMarkSweepGC"行更改为较新的G1垃圾收集器:"-XX:+UnlockExperimentalVMOptions"(在JDK 7中您可能不需要此行,不确定),然后使用"-XX:+UseG1GC". - GKelly
我建议将“-Xms”设置为“-Xmx”。这样,垃圾回收器就不必每隔一段时间分配更多的内存。 - Elias Dorneles
4
如果您想使用新的G1C1垃圾回收机制,需要删除-XX:+CMSIncrementalMode和-XX:+CMSIncrementalPacing选项,以便最终获得以下参数: -Xms128m -Xmx512m -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxPermSize = 120m -XX:MaxGCPauseMillis = 10 -XX:MaxHeapFreeRatio = 70 - Phyxx
我也遇到了使用启用G1C1选项的Eclipse GIT插件时出现问题(Eclipse会崩溃)。 - Phyxx

3

Ganymede Java EE 插件在内存中运行时非常庞大。此外,我对 FindBugs 和其在长时间编码会话中的可靠性有不好的经历。

如果您不能没有这些插件,那么您唯一的选择就是开始关闭项目。如果您限制工作区中打开的项目数量,则编译器(和 FindBugs)需要处理的内容就会变少,您的内存使用量将大大降低。

通常我按客户拆分我的工作区,然后仅在每个工作区中保留最基本的项目。请注意,如果您有特别大的项目(特别是 WST 检查的文件较多的项目),那么它不仅会占用您的内存,而且在编译时也会导致明显的响应暂停。


1
或者购买更多内存。为什么要牺牲功能来节省几百兆字节的内存呢? - Stu Thompson

3

我认为JVM只有在必要时(即接近极限时)才会进行大量的垃圾回收。因此,它会尽可能地获取所有可用的内存,可能达到eclipse.ini中设置的限制(-Xmx参数,在此处设置为512MiB)。

您可以通过查看“首选项” -> “常规” -> “显示堆状态”来获得当前堆状态的可视化表示。它将在状态栏中创建一个小仪表,还有一个“垃圾桶”按钮,您可以使用它来触发手动垃圾回收。


3

仅供参考,

  • 你可以在eclipse.ini文件中添加

    -Dcom.sun.management.jmxremote

启动eclipse后,通过jdk安装中的'jconsole.exe'监视其内存使用情况。

C:\[jdk1.6.0_0x path]\bin\jconsole.exe

选择“连接/新建连接/‘eclipse’”来监视Eclipse使用的内存

  • 始终使用最新的JVM启动您的Eclipse(这不会阻止您在Eclipse中使用任何其他JFK编译项目)

jvisualvm.exe 可以在相同的位置找到,可以附加到未修改的正在运行的 Java 程序。 - Thorbjørn Ravn Andersen

2

Eclipse本身就很臃肿,添加越多的插件只会加重这种情况。虽然它拥有丰富的功能,仍是我最喜欢的IDE,但如果你想要一个轻量级的IDE,我建议放弃Eclipse;如果您长时间让它运行,则常规情况下需要占用500MB内存。


6
没错,但你不能带着内存条来上班然后把它塞到电脑里。 - Valentin Rocher

2

Eclipse是一个非常臃肿的集成开发环境。您可以通过在“项目”->“自动构建”下关闭自动项目构建来最小化它。同时,关闭您当前未工作的任何打开的项目也会有所帮助。


2
我认为它有些臃肿,但不是泄漏的(如果它泄漏了,就会不断攀升,直到崩溃)。正如其他人所说,内存很便宜!这对我来说似乎是一个简单的决定:花一点点钱增加更多的内存,而不是因为没有足够的内存预算去运行500MB的Eclipse而失去生产力。
简而言之,什么更有价值:
1. 使用你所熟悉且具备所需插件的IDE所获得的生产力;还是 2. 花费50-200美元购买一些内存?

1

我在使用基于Java的程序时遇到了内存消耗问题。我发现这可能与所选择的JVM有关(在我的情况下是这样)。尝试使用-client开关运行eclipse。

在某些操作系统中(我相信大多数Linux发行版),默认选项是服务器VM,当运行带有GUI的应用程序时,它将消耗更多的内存。

在我的情况下,初始内存占用从300MB降至80MB。

对于我的糟糕英语表示抱歉。我希望我能帮到你。

敬礼 Arkadiusz Jamrocha


1

RAM 相对便宜(这并不是内存管理不良的借口)。未使用的内存本质上是浪费的内存。如果你遇到限制,而 IDE 是问题所在,可以考虑减少多任务处理、调整内存需求或购买更多内存。如果 Eclipse 是你的主要 IDE,我不会削弱它的性能。


1

不要抱怨Eclipse占用多少内存,而是分析问题所在。可能只是一个插件导致的。

请参阅此博客: "分析Eclipse内存消耗"

祝好, 马库斯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接