如何为java进程分配好RAM量?

时间:2015-04-08 14:45:52

标签: java eclipse memory memory-management

我觉得几乎不可能准确地控制java进程将使用多少RAM内存。最好的例子是Eclipse,您可以使用-Xms256m -Xmx512m来表示要使用的内存至少为256m(因为您肯定会得到低于此值的OOM错误),并且堆不应该大于512m (但只考虑堆,进程内存可以达到800m甚至更多的值)

我也有这种感觉,90%的时间,在一两个小时之后,你的堆将总是达到-Xmx值,无论它是什么。再一次,最好的例子是Eclipse:用-Xmx512m运行它,它的进程将使用大约800MB的RAM。使用-Xmx1024m再次运行它,两小时后完全相同的过程在完全相同的条件下将使用大约1200MB或RAM。

我的结论是,从本质上讲,java进程是贪婪的,并且它们将始终使用尽可能多的内存,无论它们的上限有多高(我认为默认情况下不能大于2或3GB)无论如何在java热点上。)

当我阅读诸如How to calculate (and specify) the total memory space allowed for java process?之类的相关问题时,我可以看到至少在问题发生之前,每个人都像我继续前进一样,这会使-Xmx值提高一小部分每次都有内存问题。但是这个问题是从2010年开始的。我无法相信在2015年,一个java进程是不合理的,并试图释放尽可能多的内存,而不是吃任何允许的内容甚至更多??

1 个答案:

答案 0 :(得分:0)

超出XMX范围的内存可能是永久内存空间(PermGen),它位于HEAP内存之外,由 XMS / XMX控制

我通常会尝试这样设置:

-XX:PermSize=256M
-XX:MaxPermSize=256M

我要做的另一件事是将Xmx和Xmx都设置为最大值。所以它已经分配了eclipse将使用的整个HEAP空间(加上permgen)

在一篇很棒的博客文章下面,提供了一些关于eclipse的mem配置的提示:

http://devwithpassion.com/handrus/boost-eclipse-performance-also-works-for-zendstudio/