我的Eclipse占用空间从500MB稳步增加到> 1GB,而我没有做任何特别的事情 - 只运行一些日志重的程序.做一个手动GC,关闭和重新打开项目根本没有帮助,一旦它超过1GB就停留在那里.
我运行jvisualvm并从heapdump中发现数百兆字节是表示日志输出的char [].
我让它成为关闭已停止进程的所有控制台的习惯,所以事实并非如此.控制台缓冲区设置为1MB(字符).我已关闭控制台视图并重新打开它.
我可以粘贴我特定的eclipse.ini,但我尝试了不同的GC和内存设置,不同的JVM,不同的Eclipse版本 - 行为仍然是相同的.
对我而言,似乎日志在某个地方被卡住而且永远不会被释放.还有其他人有这个问题吗?是否有设置从旧控制台视图释放内存?
简短的回答:堆大小没有缩小,只是增加。
长答案:最终这似乎是多种因素的结合。我不完全确定 JVM 默认选项应该是什么,但我的 XP 机器将 Windows 性能优化设置为“服务器”/“后台应用程序”。我相信这也会导致 JVM 默认使用“-server”选项而不是“-client”。-server 选项不允许堆收缩。
据我所知,parallelGC 不允许堆收缩。
XX:MaxHeapFreeRatio (70) 和 XX:MinHeapFreeRatio (30) 的默认值在放弃可用内存方面非常懒惰。将它们设置为 20/10 将使堆大小更接近实际使用情况。
为什么这一切都很重要?好吧,如果您正在用 Java 开发桌面应用程序,您的客户可能会对不断增加的内存使用量感到不安,并归咎于您糟糕的编程。有点像 Firefox 发生的情况。
| 归档时间: | 
 | 
| 查看次数: | 704 次 | 
| 最近记录: |