Я ожидаю, что код заставит 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. журнал

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
0
王ks 6 Ноя 2019 в 18:23
Как вы думаете, почему JVM должна рухнуть?
 – 
apangin
6 Ноя 2019 в 18:40
На самом деле, когда я обнаруживаю, что у меня нет журнала сбоев, я не думаю, что JVM сбой, но что заставляет JVM выйти, OOM? но я думаю, что OOM просто закончит тему
 – 
王ks
6 Ноя 2019 в 18:49
1
Да. Когда завершается последний поток, не являющийся демоном, JVM завершает работу. Обратите внимание, что поток main также генерирует OutOfMemoryError.
 – 
apangin
6 Ноя 2019 в 22:08

1 ответ

Выход JVM из-за основного потока OOM, поэтому выход JVM, когда завершается последний поток, не являющийся демоном, спасибо за @apangin

0
王ks 7 Ноя 2019 в 18:36