gpt4 book ai didi

java - 哪些场景下 JVM 会被杀死?

转载 作者:行者123 更新时间:2023-12-02 13:00:33 26 4
gpt4 key购买 nike

我正在考虑 JVM 可能因编程错误而被终止的所有场景?

SomeOne 声称 java.lang.OutOfMemoryError: Java heap space 不会导致 JVM 被杀死,但是当我运行程序进行断言时,没有发现这一点是真实的。我试过this程序

在哪里可以找到可恢复不可恢复错误列表?

谢谢

最佳答案

JVM 将停止

  • 由于 JVM 中的错误而崩溃时
  • 当所有非守护线程停止运行时
  • 调用 System.exit() 时

抛出异常或错误永远不会停止 JVM。但是,如果它没有被捕获,它可以做什么,如果导致调用它的线程终止其执行。如果它是最后一个运行的非守护线程,那么 JVM 将停止。

示例:

public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
while (true) {
System.out.println("still running...");
try {
Thread.sleep(1000L);
}
catch (InterruptedException e) {
// ignore: I don't want to die
}
}
}
};

Thread neverEndingThread = new Thread(r);
neverEndingThread.start();

List<byte[]> arrays = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
byte[] hugeArray = new byte[2_000_000_000];
arrays.add(hugeArray);
}
System.out.println(arrays);
}

执行此代码将启动一个新线程,然后将导致主线程抛出 OutOfMemoryError。由于这个错误没有被主线程捕获,因此主线程停止执行。但 JVM 不会停止,因为永无止境的线程继续运行。

关于java - 哪些场景下 JVM 会被杀死?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31638272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com