7

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

我运行了 jvisualvm 并从 heapdump 中发现数百兆字节是 char[] 代表日志输出

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

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

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

4

2 回答 2

1

当我想在这里写一些聪明的东西时,我发现了这个:如何减少 Eclipse 的内存使用?禁用拼写检查的建议实际上产生了很大的不同

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

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

首选项>常规>显示堆状态

于 2012-09-11T17:11:27.240 回答
0

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

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

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

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

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

于 2012-09-21T09:03:52.107 回答