gpt4 book ai didi

java - 如何内联抛出异常的方法?

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:03 24 4
gpt4 key购买 nike

我很好奇 Java JVM 有时如何内联有可能抛出异常的方法。我假设至少可以内联一些这样的方法(例如那些具有数组访问权限并因此有可能抛出 ArrayIndexOutOfBoundsException 的方法)。我看到的问题是,如果确实发生了异常,那么如果您已经内联该方法,您如何显示正确的堆栈跟踪?既然可以在不同的机器上内联不同的方法,内联如何不破坏堆栈跟踪机制?

最佳答案

您设想的问题是什么?由于是 JVM 本身进行内联,因此没有什么可以阻止它记住它在何处内联的内容,并在构造堆栈跟踪以安装到 Throwable 对象中时对此进行更正。

当构造抛出异常时,JVM 将遍历 CPU 堆栈并确定每个机器堆栈帧是否对应于解释的字节码、JIT 代码、库中的 native 代码等。为此,它引用了一些表,这些表告诉机器代码中的哪些地址对应于字节码中的哪些指令(如果类文件中存在该信息,则进一步返回源代码行)。这张表可以很好的说明JITted代码中的某个地方可以对应多个Java级别的栈帧。

但是,不需要 JVM 来执行此操作。它也可以选择简单地构建其中带有神秘中断的堆栈跟踪。查看javadoc for Throwable.getStackTrace() . (甚至不要求 JVM 完全能够生成堆栈跟踪)。

关于java - 如何内联抛出异常的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218575/

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