java应用程序可以分配比jvm启动参数指定的内存更多的内存吗?

假设java应用程序没有使用任何本机库。 有没有办法可以分配比jvm启动参数指定的内存更多的内存?

反过来问:我可以依赖java应用程序永远不会分配比JVM启动参数限制更多的内存吗?

是的,它可以。 它无法在JVM堆上分配更多内存,但可以使用ByteBuffer.allocateDirect或通过调用自定义本机代码来分配本机内存。

实际上,您总是需要比启动脚本中指定的-Xmx更多的内存。 GC内部,JIT优化表,堆堆分配,permgen,线程堆栈等都会造成损失。

不,Java应用程序不能超出-Xmx指定的-Xmx 。 如果可能的话也没有多大意义 – 为什么首先要打扰-Xmx呢?

我在Dream.In.Code上找到了一个有趣的链接,其中一个用户给出了一个程序的例子,该程序设法调整自身的大小,但它通过产生一个新的JVM进程来工作。