-XX:在'java.lang.OutOfMemoryError:Direct buffer memory'上忽略了+ ExitOnOutOfMemoryError

时间:2018-05-08 11:22:04

标签: java nio

如果OutOfMemoryError是由分配直接字节缓冲区引起的,则忽略JVM标志-XX:+ExitOnOutOfMemoryError

检查Oracle JDK和OpenJDK Java版“1.8.0_144” Java(TM)SE运行时环境(版本1.8.0_144-b01) Java HotSpot(TM)64位服务器VM(版本25.144-b01,混合模式)

操作系统:Ubuntu 16.04

重现运行以下代码

package com.company;
import java.nio.ByteBuffer;
public class Main {

    public static void main(String[] args) {
        // This should guarantee to throw:            
        try {
            ByteBuffer bb = ByteBuffer.allocateDirect(10485760*2);
            System.out.println("OOME not triggered");
        } catch (OutOfMemoryError err) {                
            System.out.println("OOME didn't terminate JVM!");
        }
    }
}

jvm args:-XX:MaxDirectMemorySize=10485760 -XX:+ExitOnOutOfMemoryError

程序输出“OOME没有终止JVM!”并以退出代码0终止。 我希望它崩溃并返回大于0的退出代码。当由于堆空间不足而抛出OutOfMemory时,它会以这种方式工作。

如何让ExitOnOutOfMemoryError选项适用于此案例? 也许有一个更新的JDK或替代JDK实现没有这样的错误?

我对druid.io有这个问题。如果实时索引任务遇到

java.lang.OutOfMemoryError: Direct buffer memory

它挂起并且不会终止。

0 个答案:

没有答案