2009-09-29 49 views

回答

82

使用参数-Xms<memory>-Xmx<memory>。分别用于指示Megs和Gig字节的数字后面使用MG-Xms表示最小值和-Xmx的最大值。

+1

你可能也想看看MaxPermSize。 – pmu 2009-09-30 00:36:01

+54

他询问JVM内存。你所说的是堆的大小。它们都不同 – vsingh 2013-01-31 19:06:42

+6

要重新提供其他评论提到的内容,Xms和Xmx仅配置堆。虽然配置这些变量对非堆空间有间接影响,但是提出问题的人试图确定是否有方法来配置总内存使用量(堆+非堆) – murungu 2014-03-03 16:08:48

26

你不应该担心栈泄漏内存(这是非常罕见的)。唯一一次可以让堆栈失去控制的是无限的(或者非常深的)递归。

这只是堆。对不起,一开始没有完全读你的问题。

您需要使用以下命令行参数运行JVM。

-Xmx<ammount of memory> 

实施例:

-Xmx1024m 

这将允许的存储器为JVM 1GB的最大值。

+0

这是不正确的,根据这个线程,有多种方法可以泄漏到堆外部http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak – erotsppa 2009-09-29 18:31:53

+0

你是对的,有很多方法可以解决与堆栈无关的内存问题。但是,它们并不常见。 – jjnguy 2009-09-29 18:37:25

+5

很确定你无法控制非堆内存大小,你能吗? – 2009-09-29 19:17:38

9

上面的答案是正确的,你不能优雅地控制java进程分配多少本地内存。这取决于你的应用程序在做什么。

也就是说,根据平台的不同,您可能可以使用某种机制,例如ulimit来限制java或任何其他进程的大小。

只是不要指望它如果达到这个限制就会优雅地失败。本地内存分配失败比Java堆上的分配失败更难处理。应用程序崩溃的可能性相当大,但取决于系统对于保持适合您的进程大小有多关键。

2

的NativeHeap可以通过-XX被increasded:MaxDirectMemorySize = 256M (默认为128)

我从来没有使用过。也许你会发现它很有用。

+1

我怀疑op是否想要这样:当你从java调用C/C++代码时使用本地内存。 – 2013-05-20 08:59:38

+4

如果您使用直接内存分配缓冲区,则在进行nio调用时也会使用本地内存。 (...和类加载器,以及线程信息....) – stu 2014-03-07 15:07:07

10

如果要限制对JVM内存(不是堆的大小) 的ulimit -v

要获取JVM和堆内存之间的差异的想法,看看这个优秀的文章 http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

+6

'ulimit'是一个Linux命令吗?我做了一个快速的Google搜索,没有看到'ulimit'和JVM之间的任何关系。是 – Sam 2015-05-26 04:09:28

+0

是的,它是linux命令。 http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/x4733.html – vsingh 2017-05-15 02:41:23