假设 java 应用程序不使用任何本机库。有没有一种方法可以分配比 jvm 启动参数指定的更多的内存?
反过来问:我可以相信 java 应用程序分配的内存永远不会超过 JVM 启动参数的限制吗?
假设 java 应用程序不使用任何本机库。有没有一种方法可以分配比 jvm 启动参数指定的更多的内存?
反过来问:我可以相信 java 应用程序分配的内存永远不会超过 JVM 启动参数的限制吗?
是的,它可以。它不能在 JVM 堆上分配更多内存,但它可以通过使用ByteBuffer.allocateDirect
或调用自定义本机代码来分配本机内存。
实际上,您总是需要比启动脚本中指定的 -Xmx 更多的内存。GC 内部、JIT 优化表、堆外分配、permgen、线程堆栈等都在产生影响。
不,Java 应用程序不能超出-Xmx
. 如果可以,那就没有多大意义了——那么,为什么-Xmx
首先要费心呢?
我在 Dream.In.Code上发现了一个有趣的链接,其中用户给出了一个程序示例,该程序设法调整自身大小,但它通过产生一个新的 JVM 进程来工作。