我正在尝试设置JVM进程将尝试分配的最大字节数。我不是在谈论堆,而是操作系统级别的内存总量。 我看上去很努力,但是还没有找到任何解决方案,我很难相信。即使使用Java 10,它也应该能够保持在容器内存范围之内。
大约9年前就已经问过这个问题(请参阅:How to set the maximum memory usage for JVM?),但是答案不正确。
Runtime
对象包含一个maxMemory()
方法,该方法不正确记录如下:
返回Java虚拟机将尝试使用的最大内存量。
maxMemory()
方法将返回最大的堆容量,而不是JVM进程可以声明的内存总量。
问题:JVM不能对自己的内存使用进行硬限制吗?
答案 0 :(得分:0)
可能没有容易设定的严格限制,例如Java线程堆栈,编译的代码和NIO缓冲区是在堆外分配的。即使我们总结-Xmx
,-Xss
,-XX:MaxMetaspaceSize
和其他选项,也总是有可能通过Java Native Interface进行交互的自定义本机代码将管理它自己的内存。