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

问题描述 投票:0回答:1

我希望代码使JVM退出并崩溃,并且我看到JVM退出,但是我没有看到JVM崩溃日志(hs_err_pid)和命令“ sudo egrep -i'java'/ var / log / messages”没有任何消息,因此不是Linux杀死进程。但是我可以看到消息“进程以退出代码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());
        }
    }

}

jvm
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.