如何设置JVM进程将尝试分配的最大内存量?

时间:2018-11-01 10:51:28

标签: java memory containers limit

我正在尝试设置JVM进程将尝试分配的最大字节数。我不是在谈论堆,而是操作系统级别的内存总量。 我看上去很努力,但是还没有找到任何解决方案,我很难相信。即使使用Java 10,它也应该能够保持在容器内存范围之内。

大约9年前就已经问过这个问题(请参阅:How to set the maximum memory usage for JVM?),但是答案不正确

Runtime对象包含一个maxMemory()方法,该方法不正确记录如下:

  

返回Java虚拟机将尝试使用的最大内存量。

maxMemory()方法将返回最大的堆容量,而不是JVM进程可以声明的内存总量。

问题:JVM不能对自己的内存使用进行硬限制吗?

1 个答案:

答案 0 :(得分:0)

可能没有容易设定的严格限制,例如Java线程堆栈,编译的代码和NIO缓冲区是在堆外分配的。即使我们总结-Xmx-Xss-XX:MaxMetaspaceSize和其他选项,也总是有可能通过Java Native Interface进行交互的自定义​​本机代码将管理它自己的内存。