我想知道 JVM 是如何检测崩溃的,具体来说,它是如何知道它在哪一行代码上崩溃的。
这是代码的示例部分:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> crashMe = new ArrayList<String>(0);
crashMe.get(1);
}
}
这是崩溃消息(OpenJDK 10.0.2 通过repl.it):
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:458)
at Main.main(Main.java:8)
到目前为止所有预期的行为。
但是 JVM 怎么知道我在第 8 行崩溃了呢?编译java代码时是否忽略新行等?为什么 jdk.internal 包甚至抛出异常,当它们对 JVM 开发人员以外的任何人都没有用时?
提前感谢任何能给我一些见解的人。
紫衣仙女
相关分类