我的Linux服务器需要能够为开发人员处理30多个eclipse实例。我做了一个运行10个eclipse实例的快速测试。与每个eclipse相关的Java进程最初约为200MB RSS内存,当加载更多项目时,增加到大约550MB。
但是,在关闭/删除eclipse实例中的所有项目之后,Java进程似乎没有释放内存。我仍然看到它使用超过550MB的RSS。
如何更改Eclipse或Java设置,以便在开发人员关闭项目或闲置一段时间后减少内存占用量?
由于
答案 0 :(得分:2)
我从未见过Java发布内存。
我认为你不会因为尝试使用Eclipse释放内存而获得任何价值,我已经看过YEARS的小内存计数器而且从来没有看到分配的内存丢失。
您可以尝试其中之一。 每次会话后,退出JVM并重新启动。
将-Xmx设置得更低。
将实例分为高-Xmx和低-Xmx的类别,让用户确定他想要的那个。
作为一个想法,如果它对你真的很重要,你可能能够在一个VM下运行多个eclipse实例。它可能是太多的工作(人 - 周 - 人 - 年),但如果你能做到正确,你可以减少150-200mb /例的开销。缺点是VM崩溃(这些日子非常罕见)会杀死所有人。
测试这个理论将是从现有的JVM中调用eclipse的main并试图让它显示在某个有用的地方。人工年的其余部分用于试图弄清楚他们在哪里使用邪恶的静态变量或单身人士并将其改为其他东西。
答案 1 :(得分:2)
您可能希望尝试使用这些(和其他)JVM tuning options来使JVM不太愿意将内存返回到操作系统:
-XX:MaxHeapFreeRatio GC之后的最大堆空闲百分比,以避免收缩。默认值为70。 -XX:MinHeapFreeRatio GC之后的最小堆空闲百分比,以避免扩展。默认值为40。
但是,我怀疑你不会看到eclipse进程缩小到接近其初始大小的任何地方,因为eclipse是一个巨大的,复杂的应用程序,可能是懒惰的负载(但是一旦使用就不会卸载)很多类和相关的数据结构。
答案 2 :(得分:1)
切换Java以使用带有HeapFreeRatio参数的G1垃圾收集器。在eclipse.ini中使用这些选项:
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:MinHeapFreeRatio=5
-XX:MaxHeapFreeRatio=25
现在,当Eclipse为一项复杂的操作耗尽超过1 GB的RAM并在垃圾收集后切换回300 MB时,内存将被释放回操作系统。
答案 3 :(得分:0)
我建议检查垃圾收集,设置正确的选项,甚至强制GC定期可能会增加时间,直到eclipse内存使用量增加。 以下链接可能有用[{3}}