【问题标题】:Can a java application allocate more memory than specified by jvm startup parameters?java 应用程序可以分配比 jvm 启动参数指定的更多的内存吗?
【发布时间】:2013-09-29 10:47:12
【问题描述】:
假设一个 java 应用程序没有使用任何本地库。
有没有办法让它分配比 jvm 启动参数指定的更多的内存?
反过来问:我可以相信 java 应用程序分配的内存永远不会超过 JVM 启动参数的限制吗?
【问题讨论】:
标签:
java
memory-management
jvm
jvm-arguments
【解决方案1】:
是的,可以。它无法在 JVM 堆上分配更多内存,但可以通过使用 ByteBuffer.allocateDirect 或调用自定义原生代码来分配原生内存。
【解决方案2】:
确实,您总是需要比启动脚本中指定的 -Xmx 更多的内存。 GC 内部、JIT 优化表、堆外分配、permgen、线程堆栈等都在产生影响。
【解决方案3】:
不,Java 应用程序不能超出-Xmx 指定的大小。如果可以,那就没有多大意义了——那么,为什么首先要麻烦-Xmx呢?
我发现了一个有趣的link on Dream.In.Code,其中用户给出了一个程序的示例,该程序设法调整自身大小,但它通过产生一个新的 JVM 进程来工作。