假设java应用程序没有使用任何本机库。 有没有办法可以分配比jvm启动参数指定的内存更多的内存?
反过来问:我可以依赖java应用程序永远不会分配比JVM启动参数更多的内存吗?
答案 0 :(得分:2)
是的,它可以。它无法在JVM堆上分配更多内存,但可以使用ByteBuffer.allocateDirect
或通过调用自定义本机代码来分配本机内存。
答案 1 :(得分:2)
实际上,您总是需要比启动脚本中指定的-Xmx更多的内存。 GC内部,JIT优化表,堆堆分配,permgen,线程堆栈等都会造成损失。
答案 2 :(得分:-1)
不,Java应用程序不能超出-Xmx
指定的大小。如果可能的话也没有多大意义 - 为什么首先要考虑-Xmx
呢?
我找到了一个有趣的link on Dream.In.Code,其中一个用户给出了一个程序的例子,该程序设法调整自身的大小,但它通过产生一个新的JVM进程来工作。