You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JVM参数-XX:+ExitOnOutOfMemoryError在直接内存OOM时失效问题咨询

JVM参数-XX:+ExitOnOutOfMemoryError对Direct Buffer内存溢出不生效的问题

最近我碰到了一个挺棘手的JVM行为问题:当程序抛出java.lang.OutOfMemoryError: Direct buffer memory时,原本配置的-XX:+ExitOnOutOfMemoryError参数居然完全被忽略了——JVM并没有像预期那样直接退出,而是继续运行并不断抛出错误信息。

验证环境

我已经在以下环境中确认了这个问题的存在:

  • JDK版本:Oracle JDK/OpenJDK 1.8.0_144(具体运行环境:Java(TM) SE Runtime Environment (build 1.8.0_144-b01),Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode))
  • 操作系统:Ubuntu 16.04

复现代码

你可以用下面的代码快速复现这个问题:

package com.company;
import java.nio.ByteBuffer;

public class Main {
    public static void main(String[] args) {
        // 循环分配直接缓冲区,直到触发Direct buffer内存溢出
        while (true) {
            ByteBuffer.allocateDirect(1024 * 1024 * 10); // 每次分配10MB的直接内存
        }
    }
}

运行时加上-XX:+ExitOnOutOfMemoryError参数,你会观察到:当JVM抛出OutOfMemoryError: Direct buffer memory后,程序并不会立即终止,这明显违反了该参数的设计预期。

内容的提问来源于stack exchange,提问作者denisvlah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:10:26