我使用最近的Eclipse Ganymede版,具体是针对Java EE和Web开发人员的版本。我安装了一些额外的插件(例如Subclipse,Spring,FindBugs),并删除了所有Mylyn插件。
在Eclipse中,我没有进行任何特别繁重的操作,比如启动应用程序服务器或连接到数据库,但出现了一个问题,几个小时后,我发现Eclipse使用了接近500MB的内存。
有人知道为什么Eclipse会使用这么多的内存(是否存在内存泄漏?),更重要的是,是否有什么方法可以改进这种情况呢?
关于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/以了解各个设置的说明)。如您所见,我更关心编辑过程中避免长时间暂停,而不是实际内存使用量,但您可以将此作为起点。
Ganymede Java EE 插件在内存中运行时非常庞大。此外,我对 FindBugs 和其在长时间编码会话中的可靠性有不好的经历。
如果您不能没有这些插件,那么您唯一的选择就是开始关闭项目。如果您限制工作区中打开的项目数量,则编译器(和 FindBugs)需要处理的内容就会变少,您的内存使用量将大大降低。
通常我按客户拆分我的工作区,然后仅在每个工作区中保留最基本的项目。请注意,如果您有特别大的项目(特别是 WST 检查的文件较多的项目),那么它不仅会占用您的内存,而且在编译时也会导致明显的响应暂停。
我认为JVM只有在必要时(即接近极限时)才会进行大量的垃圾回收。因此,它会尽可能地获取所有可用的内存,可能达到eclipse.ini中设置的限制(-Xmx参数,在此处设置为512MiB)。
您可以通过查看“首选项” -> “常规” -> “显示堆状态”来获得当前堆状态的可视化表示。它将在状态栏中创建一个小仪表,还有一个“垃圾桶”按钮,您可以使用它来触发手动垃圾回收。
仅供参考,
你可以在eclipse.ini文件中添加
-Dcom.sun.management.jmxremote
启动eclipse后,通过jdk安装中的'jconsole.exe'监视其内存使用情况。
C:\[jdk1.6.0_0x path]\bin\jconsole.exe
选择“连接/新建连接/‘eclipse’”来监视Eclipse使用的内存
Eclipse本身就很臃肿,添加越多的插件只会加重这种情况。虽然它拥有丰富的功能,仍是我最喜欢的IDE,但如果你想要一个轻量级的IDE,我建议放弃Eclipse;如果您长时间让它运行,则常规情况下需要占用500MB内存。
Eclipse是一个非常臃肿的集成开发环境。您可以通过在“项目”->“自动构建”下关闭自动项目构建来最小化它。同时,关闭您当前未工作的任何打开的项目也会有所帮助。
我在使用基于Java的程序时遇到了内存消耗问题。我发现这可能与所选择的JVM有关(在我的情况下是这样)。尝试使用-client开关运行eclipse。
在某些操作系统中(我相信大多数Linux发行版),默认选项是服务器VM,当运行带有GUI的应用程序时,它将消耗更多的内存。
在我的情况下,初始内存占用从300MB降至80MB。
对于我的糟糕英语表示抱歉。我希望我能帮到你。
敬礼 Arkadiusz Jamrocha
RAM 相对便宜(这并不是内存管理不良的借口)。未使用的内存本质上是浪费的内存。如果你遇到限制,而 IDE 是问题所在,可以考虑减少多任务处理、调整内存需求或购买更多内存。如果 Eclipse 是你的主要 IDE,我不会削弱它的性能。