почему мой код вызывает OOM и завершает работу JVM, но я не вижу журнал сбоя JVM (hs_err_pid) - PullRequest
0 голосов
/ 06 ноября 2019

Я ожидаю, что код завершит работу JVM и завершится сбоем, и я вижу выход JVM, но я не вижу журнал сбоев JVM (hs_err_pid) и команду "sudo egrep -i 'java' / var / log / messages"Хава ничего сообщение, так что это не Linux, убить процесс. но я вижу сообщение "Процесс завершен с кодом выхода 1", поэтому вопрос в том, что заставляет jvm exit

начинаться с: 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());
        }
    }

}

1 Ответ

0 голосов
/ 07 ноября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...