如何减少Eclipse Ganymede的内存使用量?
我使用最近的Eclipse Ganymede版本,特别是Java EE和Web开发人员的发行版。我已经安装了一些其他插件(例如Subclipse,Spring,FindBugs),并删除了所有Mylyn插件。
我没有在Eclipse中执行任何特别繁重的工作,例如启动应用程序服务器或者连接到数据库,但是由于某些原因,经过几个小时的使用,我发现Eclipse正在使用接近500MB的内存。
有谁知道为什么Eclipse使用这么多内存(泄漏?),更重要的是,是否有什么我可以做的以改善这一点?
解决方案
Eclipse本身非常肿,添加的更多插件只会加剧这种情况。它仍然是我最喜欢的IDE,因为它的功能肯定不短,但是如果我们正在寻找轻量级的IDE,那么我建议我们放弃Eclipse。如果让内存运行一段时间,则正常运行一半的内存是很正常的。
好吧,我们没有指定在哪个平台上发生这种情况。如果我们使用的是Windows XP,Vista,Linux,OS X等,则内存管理可能会有所不同。
通常,在我的计算机(带有1Gb Ram的WinXP)上,Eclipse占用的内存很少超过200Mb,这取决于打开的项目,加载的插件和正在进行的操作的大小。
RAM相对便宜(这并不是内存管理不佳的借口)。未使用的内存本质上是WASTED内存。如果我们即将达到极限,并且IDE成为问题,请考虑减少多任务处理,调整内存需求或者购买更多产品。如果那是最佳选择,那么我不会削弱Eclipse。
当在内存中运行时,Ganymede Java EE插件绝对庞大。另外,我在使用FindBugs及其在长时间的编码过程中的可靠性方面也有不好的经验。
如果我们不能没有这些插件,那么我们唯一的办法就是开始关闭项目。如果我们限制工作空间中打开的项目的数量,则编译器(和FindBugs)将不必担心,并且内存使用将大大减少。
我通常按客户划分工作区,然后仅在每个工作区中打开最少的项目。请注意,如果我们有一个特别大的项目(尤其是那些带有WST检查的很多文件的项目),那么这不仅会占用内存,还会在编译时引起明显的响应暂停。
Eclipse是一个非常肿的IDE。我们可以通过在项目->自动构建下打开自动项目构建来最小化它。关闭任何当前未打开的项目也可以提供帮助。
我会称它肿,但不会漏气。 (如果泄漏,它将爬上去直到有东西撞坏。)正如其他人所说,内存很便宜!对我来说,这似乎是一个简单的决定:花一点点钱在更多的内存上而不是提高生产力,因为我们没有足够的内存预算来运行Eclipse @ 500MB。
概括性的反问:什么更有价值:
- 通过将所需的IDE与所需的插件一起使用可以提高工作效率,或者
- 在某些内存上花费$ 50-200?
我认为JVM除非需要这样做(即达到极限),否则不会进行大量垃圾回收。因此,它获取了所有可以获取的内存,可能达到了eclipse.ini中设置的限制(-Xmx参数,此处设置为512MiB)。
我们可以通过选择"首选项"->"常规"->"显示堆状态"来直观地了解当前堆状态。它将在状态栏中创建一个小规,还有一个"垃圾箱"按钮,可用于触发手动垃圾收集。
我通常给Eclipse 512 MB的RAM(使用JVM的-Xmx选项),并且Ganymede没有任何内存问题。几个月前,我已升级到两个GB的RAM,我真的可以推荐它。它制造了巨大的差异。
仅供参考,
- 我们可以添加-Dcom.sun.management.jmxremote
到eclise.ini文件,启动eclipse,然后通过在jdk安装中找到的" jconsole.exe"监视其内存使用情况。
C:\[jdk1.6.0_0x path]\bin\jconsole.exe
选择"连接/新建连接/ Eclipse"以监视Eclipse使用的内存
- 始终使用最新的jvm启动eclipse(这不会阻止我们使用任何其他jfk在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/)。如我们所见,与实际内存使用量相比,我更关心的是避免在编辑过程中长时间停顿,但是我们可以以此为起点。
与其抱怨Eclipse需要占用多少内存,不如继续分析问题出在哪里。我可能只是一个插件。
在此处查看博客:
"分析日食的内存消耗"
问候,
马库斯
Eclipse通常会在内存中保留很多元数据,以允许进行各种类型的IDE操练。
我发现Eclipse的默认配置在大多数情况下都能很好地工作,并且其中包括可以消耗多少内存的限制(由JVM显式或者隐式指定),并且Eclipse将保留在其中。
我们是否有任何特定原因要担心内存使用情况?