java应用程序能否分配比jvm启动参数指定的内存更多的内存?
假设java应用程序未使用任何本机库。 有没有一种方法可以让它分配比jvm启动参数指定的更多的内存java应用程序能否分配比jvm启动参数指定的内存更多的内存?,java,memory-management,jvm,jvm-arguments,Java,Memory Management,Jvm,Jvm Arguments,假设java应用程序未使用任何本机库。 有没有一种方法可以让它分配比jvm启动参数指定的更多的内存 反过来问:我能相信java应用程序永远不会分配超过JVM启动参数限制的内存吗 否,Java应用程序不能超过-Xmx指定的大小。如果可以的话,那就没什么意义了——那么,为什么要麻烦先让-Xmx 我发现了一个有趣的例子,用户给出了一个程序的例子,该程序能够调整自身大小,但它通过生成一个新的JVM进程来工作。是的,它可以。它无法在JVM堆上分配更多内存,但它可以通过使用ByteBuffer.alloca
反过来问:我能相信java应用程序永远不会分配超过JVM启动参数限制的内存吗 否,Java应用程序不能超过
-Xmx
指定的大小。如果可以的话,那就没什么意义了——那么,为什么要麻烦先让-Xmx
我发现了一个有趣的例子,用户给出了一个程序的例子,该程序能够调整自身大小,但它通过生成一个新的JVM进程来工作。是的,它可以。它无法在JVM堆上分配更多内存,但它可以通过使用
ByteBuffer.allocateDirect
或调用自定义本机代码来分配本机内存。事实上,您总是需要比启动脚本中指定的-Xmx更多的内存。GC内部、JIT优化表、堆外分配、permgen、线程堆栈等都在付出代价 Java应用程序将始终使用超过参数定义的最大内存(堆大小)。例如,见: