如何设置JVM的最大内存使用量?

ero*_*ppa 125 java memory profiling memory-leaks memory-management

我想限制JVM使用的最大内存.注意,这不仅仅是堆,我想限制此进程使用的总内存.

Pra*_*u R 98

使用参数-Xms<memory> -Xmx<memory>.使用MG在数字后分别表示字节的Megs和Gigs.-Xms表示最小值和-Xmx最大值.

  • 他在询问JVM内存.你说的是堆大小.它们都不同 (81认同)
  • 要重新迭代其他注释所提到的内容,Xms和Xmx只配置堆.虽然配置这些变量会对非堆空间产生间接影响,但提问的人试图确定是否有办法配置总内存使用量(堆+非堆) (8认同)
  • 这不是正确答案,-Xms和-Xmx选项仅调整jvm堆大小,而不是总内存分配. (5认同)
  • 呃。所以我设置了`-Xmx524M`,这个过程占用了 1.2 GB 的 RAM。(?) (2认同)

jjn*_*guy 29

你不应该担心堆栈泄漏内存(这是非常罕见的).只有无限(或非常深)递归才能使堆栈失控.

这只是堆.对不起,首先没有完整地阅读你的问题.

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

-Xmx<ammount of memory>
Run Code Online (Sandbox Code Playgroud)

例:

-Xmx1024m
Run Code Online (Sandbox Code Playgroud)

这将允许JVM最多1GB的内存.

  • 很确定你无法控制非堆内存大小,可以吗? (8认同)
  • 这是不正确的,根据这个线程,有多种方法可以泄漏到堆之外http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak (2认同)
  • @alexandergunnarson MaxDirectMemorySize仅影响NIO缓冲区。JVM使用所有其他各种本机内存。 (2认同)

vsi*_*ngh 16

如果你想限制内存为jvm(不是堆大小)ulimit -v

要了解jvm和堆内存之间的区别,请查看这篇优秀的文章 http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- Java的process.html

  • `ulimit`是Linux命令吗?我做了一个快速的谷歌搜索,并没有看到`ulimit`和JVM之间的任何关系.ÿ (8认同)
  • JVM 不能很好地处理以这种方式设置的限制 (2认同)

小智 10

上面的答案是正确的,您无法优雅地控制java进程分配的本机内存量.这取决于您的应用程序正在做什么.

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

如果达到该限制,只是不要指望它会优雅地失败.本机内存分配失败比Java堆上的分配失败要难得多.应用程序崩溃的可能性相当大,但取决于系统保持流程大小的重要性,这可能仍然适合您.