我想知道JVM如何检测崩溃,具体地说,它如何知道在哪行代码崩溃。
以下是示例代码:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> crashMe = new ArrayList<String>(0);
crashMe.get(1);
}
}
以下是崩溃信息(通过repl.it使用OpenJDK 10.0.2):
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开发人员以外没有任何用处时?
提前感谢任何能够给我一些见解的人。
.class
文件中。 - apangin