我想限制 JVM 使用的最大内存。注意,这不仅仅是堆,我还想限制这个进程使用的总内存。
您不必担心堆栈泄漏内存(这种情况非常少见)。只有在无限递归(或真正深入的递归)的情况下,堆栈才会失去控制。
这只是一堆,对不起,一开始没有看清楚你的问题。
您需要使用以下命令行参数运行 JVM。
-Xmx<ammount of memory>
例如:
-Xmx1024m
这将允许 JVM 的最大内存为1GB。
使用参数 -Xms<memory> -Xmx<memory>。在数字后面使用 M或 G分别表示兆和千兆字节。-Xms表示最小值,-Xmx表示最大值。
-Xms<memory>
-Xmx<memory>
M
G
-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