为什么我的代码导致OOM并使JVM退出,但我没有看到JVM崩溃日志(hs_err_pid)

为什么我的代码导致OOM并使JVM退出,但我没有看到JVM崩溃日志(hs_err_pid),jvm,Jvm,我希望代码使JVM退出并崩溃,我看到JVM退出,但我没有看到JVM崩溃日志(hs_err_pid),命令“sudo egrep-i'java'/var/log/messages”没有任何消息,因此不是linux杀死进程。但是我可以看到消息“processfinishedwithexit code 1”,所以问题是什么使jvm退出 首先: java-Xmx50M-Xms50M-XX:ErrorFile=/home/wks/javacode/java_error.log-XX:+PrintGCDet

我希望代码使JVM退出并崩溃,我看到JVM退出,但我没有看到JVM崩溃日志(hs_err_pid),命令“sudo egrep-i'java'/var/log/messages”没有任何消息,因此不是linux杀死进程。但是我可以看到消息“processfinishedwithexit code 1”,所以问题是什么使jvm退出

首先: java-Xmx50M-Xms50M-XX:ErrorFile=/home/wks/javacode/java_error.log-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDateStamps-Xloggc:/home/wks/javacode/gc.log

import java.util.ArrayList;
import java.util.List;



public class MakeVmAbort {

    static List<Thread> ts = new ArrayList<>();

    static List<byte[]> bs = new ArrayList<>();

    public static void main(String[] args) {

        try {
            while (true) {
                Thread t = new Thread(() -> {
                    while (true) {
                        bs.add(new byte[1024 * 1024]);
                        try {
                            Thread.sleep(500L);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                });
                t.start();
                ts.add(t);
            }

        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }
    }

}

import java.util.ArrayList;
导入java.util.List;
公共类MakeVmAbort{
静态列表ts=newarraylist();
静态列表bs=newarraylist();
公共静态void main(字符串[]args){
试一试{
while(true){
线程t=新线程(()->{
while(true){
添加(新字节[1024*1024]);
试一试{
线程。睡眠(500L);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
});
t、 start();
ts.add(t);
}
}捕获(例外e){
System.out.println(e.getStackTrace());
}
}
}

JVM退出是因为主线程抛出OOM,所以JVM在最后一个非守护进程线程完成时退出,
感谢@apangin

为什么你认为JVM应该崩溃?事实上,当我发现没有崩溃日志时,我不认为JVM是崩溃的,但是什么让JVM退出,OOM?但是我想我应该把线弄好是的。当最后一个非守护进程线程完成时,JVM退出。请注意,
main
线程也会抛出
OutOfMemoryError