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

时间:2009-09-29 17:24:55

标签: java memory memory-management memory-leaks profiling

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

5 个答案:

答案 0 :(得分:94)

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

答案 1 :(得分:28)

您不必担心堆栈泄漏内存(这种情况非常罕见)。唯一可以让堆栈失控的是无限(或非常深)递归。

这只是堆。抱歉,最初没有完整阅读您的问题。

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

-Xmx<ammount of memory>

示例:

-Xmx1024m

这将为JVM提供最多1GB的内存。

答案 2 :(得分:12)

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

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

答案 3 :(得分:10)

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

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

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

答案 4 :(得分:0)

  

NativeHeap可以通过-XX增加:MaxDirectMemorySize = 256M   (默认为128)

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