【问题标题】: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 进程来工作。

      【讨论】:

        猜你喜欢
        • 2018-08-20
        • 2021-06-06
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        • 2018-12-23
        • 2013-07-27
        • 1970-01-01
        相关资源
        最近更新 更多