如何设置JVM的最大内存使用量?
使用参数-Xms<memory>
-Xmx<memory>
。分别用于指示Megs和Gig字节的数字后面使用M
或G
。 -Xms
表示最小值和-Xmx
的最大值。
你不应该担心栈泄漏内存(这是非常罕见的)。唯一一次可以让堆栈失去控制的是无限的(或者非常深的)递归。
这只是堆。对不起,一开始没有完全读你的问题。
您需要使用以下命令行参数运行JVM。
-Xmx<ammount of memory>
实施例:
-Xmx1024m
这将允许的存储器为JVM 1GB的最大值。
上面的答案是正确的,你不能优雅地控制java进程分配多少本地内存。这取决于你的应用程序在做什么。
也就是说,根据平台的不同,您可能可以使用某种机制,例如ulimit来限制java或任何其他进程的大小。
只是不要指望它如果达到这个限制就会优雅地失败。本地内存分配失败比Java堆上的分配失败更难处理。应用程序崩溃的可能性相当大,但取决于系统对于保持适合您的进程大小有多关键。
的NativeHeap可以通过-XX被increasded:MaxDirectMemorySize = 256M (默认为128)
我从来没有使用过。也许你会发现它很有用。
我怀疑op是否想要这样:当你从java调用C/C++代码时使用本地内存。 – 2013-05-20 08:59:38
如果您使用直接内存分配缓冲区,则在进行nio调用时也会使用本地内存。 (...和类加载器,以及线程信息....) – stu 2014-03-07 15:07:07
如果要限制对JVM内存(不是堆的大小) 的ulimit -v
要获取JVM和堆内存之间的差异的想法,看看这个优秀的文章 http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html
你可能也想看看MaxPermSize。 – pmu 2009-09-30 00:36:01
他询问JVM内存。你所说的是堆的大小。它们都不同 – vsingh 2013-01-31 19:06:42
要重新提供其他评论提到的内容,Xms和Xmx仅配置堆。虽然配置这些变量对非堆空间有间接影响,但是提出问题的人试图确定是否有方法来配置总内存使用量(堆+非堆) – murungu 2014-03-03 16:08:48