为什么JSR / RET不推荐使用Java字节码?


问题内容

有谁知道为什么Java 6中不推荐使用JSR / RET字节码对?

我在网上发现的唯一有意义的解释是,它们使在运行时进行代码分析变得更加困难和缓慢。有人知道另一个原因吗?


问题答案:

JSR和RET使字节码验证比原本可能要困难得多,这是由于某些常规字节码约束的放宽(例如,进入JSR时具有一致的堆栈形状)。好处非常小(在某些情况下,方法可能更小),并且验证程序在处理奇特的JSR
/ RET模式(以及潜在的安全漏洞以及相关的完整验证的运行时成本)方面持续遇到的困难使其成为无用的功能继续拥有。

堆栈映射和由于数据而启用的轻量级验证程序是类加载期间的一项重大性能胜利,而不会牺牲安全性。