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

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

353159 次浏览

您不必担心堆栈泄漏内存(这种情况非常少见)。只有在无限递归(或真正深入的递归)的情况下,堆栈才会失去控制。

这只是一堆,对不起,一开始没有看清楚你的问题。

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

-Xmx<ammount of memory>

例如:

-Xmx1024m

这将允许 JVM 的最大内存为1GB。

使用参数 -Xms<memory> -Xmx<memory>。在数字后面使用 MG分别表示兆和千兆字节。-Xms表示最小值,-Xmx表示最大值。

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

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

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

可以通过 -XX 增加 NativeHeap: MaxDirectMemory 大小 = 256M (默认值为128)

我从没用过,也许你会用得上。

如果您想限制 jvm 的内存(而不是堆大小) Ulimit-v

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