我希望代码使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退出,因为主线程抛出OOM,所以当最后一个非守护线程完成时,JVM退出,感谢@apangin