gpt4 book ai didi

java - JVM 如何知道在运行时在哪里捕获异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:41 24 4
gpt4 key购买 nike

根据我的理解,throw 是原始的 jvm 命令。调用它时,JVM“检查当前调用堆栈是否可以捕获它”。如果不能,那么 java 会像调用 return 一样简单地弹出调用堆栈。然后jvm“检查当前调用堆栈是否可以捕获它”等等递归。

我的问题:JVM 如何通过算法知道调用堆栈中的哪个位置可以捕获给定的异常?每个调用堆栈条目中是否存储了元数据,将异常映射到代码块?堆中是否有一个静态数据结构以某种方式跟踪这个?因为某处必须有数据跟踪它。

最佳答案

JVM specification有这方面的详细信息。

特别是,section 4.7.3提供有关异常表的详细信息,这是一系列条目,说明在哪些指令之间捕获了哪些异常。 Section 3.12给出了一个具体的例子。

当然,如何将此元数据映射到 JIT 的 native 代码是另一回事 - 并且特定于实现。例如,可能存在一些从 native JIT 代码中的每个指令位置返回到原始字节码位置的映射,此时可以查询异常表以找到正确的处理程序。

关于java - JVM 如何知道在运行时在哪里捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13168798/

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