【问题标题】:Eclipse not releasing console (log) memory after clearing清除后 Eclipse 未释放控制台(日志)内存
【发布时间】:2012-09-21 17:03:52
【问题描述】:

我的 Eclipse 占用空间从 500MB 稳步增加到 >1GB,而我没有做任何特别的事情 - 只是运行一些日志繁重的程序。进行手动 GC,关闭和重新打开项目根本没有帮助,一旦超过 1GB,它就会停留在那里。

我已经运行 jvisualvm 并从堆转储中发现 数百兆字节是 char[] 代表日志输出

我养成了关闭所有停止进程的控制台的习惯,所以不是这样。 控制台缓冲区设置为 1MB(字符)。我已关闭控制台视图并重新打开它。

我可以粘贴我的特定 eclipse.ini,但我尝试了不同的 GC 和内存设置、不同的 JVM、不同的 Eclipse 版本 - 行为仍然相同。

在我看来,日志似乎被某个地方的引用卡住了,并且永远不会被释放。还有其他人有这个问题吗? 是否有从旧控制台视图释放内存的设置?

【问题讨论】:

  • 您是否同时在编辑器中打开了很多源文件?根据我的经验,关闭所有未使用的文件会释放大量内存。
  • Eclipse Juno 和 Helios。我一次只打开几个文件,没有区别。这只是无论我做什么和关闭都永远不会回来的记忆,只有重新启动 Eclipse 才能恢复它。

标签: java eclipse


【解决方案1】:

虽然我想在这里写一些聪明的东西,但我发现:How to reduce Eclipse's memory usage? 禁用拼写检查的建议实际上产生了很大的不同

所以.. 这是我自己的贡献:这听起来可能很奇怪,但我也注意到自己有很多未使用的断点使 Eclipse 变得迟缓。定期清除所有断点是个好习惯。

这只是一个与此相关的提示,有一个选项可以显示内存并从 Eclipse 中强制进行 GC。下

Preferences>General>显示堆状态

【讨论】:

  • 谢谢,我使用了该选项并从 Eclipse 和 jvisualvm 强制 GC,但没有任何效果。
【解决方案2】:

简答:堆大小不会缩小,只会增长。

长答案: 最后,这似乎是多种因素的结合。我不完全确定 JVM 默认选项应该是什么,但我的 XP 机器将 Windows 性能优化设置为“服务器”/“后台应用程序”。我相信这也会导致 JVM 默认使用“-server”选项而不是“-client”。 -server 选项不允许堆收缩。

据我所知,parallelGC 不允许堆缩小。

XX:MaxHeapFreeRatio (70) 和 XX:MinHeapFreeRatio (30) 的默认值非常懒惰地放弃空闲内存。将它们设置为 20/10 将使堆大小更接近实际使用量。

为什么所有这些都很重要?好吧,如果您正在使用 Java 开发桌面应用程序,您的客户端可能会对不断增加的内存使用量感到不安,并责怪您糟糕的编程。有点像 Firefox 发生的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2012-11-14
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多