我正在将Eclipse 3.6与Linux(64位)上的最新Sun Java 6配合使用,并具有大量的大型项目。在某些特殊情况下(例如,SVN更新),Eclipse需要多达1 GB的堆。但是大多数时候它只需要350 MB。当我启用堆状态面板时,大部分时间都会看到以下信息:
878M中的350M
我使用以下设置启动Eclipse:-Xms128m -Xmx1024m
因此,大多数情况下,大量的MB被浪费掉了,并且当内存使用量在短时间内达到峰值时很少被使用。我一点都不喜欢,我希望Eclipse将内存释放回系统,以便可以将其用于其他程序。
当Eclipse需要更多内存而可用内存不足时,Linux不能交换其他正在运行的程序,我可以接受。我听说有一个- XX:MaxHeapFreeRatio选项。但是我从来没有想过要使用什么值才能起作用。我尝试过的价值没有任何改变。
那么,如何告诉Eclipse(或Java)释放未使用的堆呢?
找到了解决方案。我将Java切换为使用G1垃圾收集器,现在HeapFreeRatio参数按预期工作。因此,我在eclipse.ini中使用以下选项:
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=25
现在,当Eclipse消耗了超过1 GB的RAM进行复杂的操作,并在垃圾回收后又切换回300 MB时,实际上已将内存释放回操作系统。