Java字节码语言有JSR指令。
我用Java 7编译器编译的代码都没有使用这个指令。
但是,有时我下载的Java二进制文件确实使用它,尽管很少使用。
我想知道编译器会使用什么指令,以及什么Java代码构造会导致他们使用指令。
编辑这不是一个副本,因为它指的是JSR指令,而不是规范请求
发布于 2014-01-15 23:40:28
实际上,Java 7类文件中甚至不允许使用JSR指令。它只允许在版本49.0或更早的类文件中,对应于Java 5或更早版本。在实践中,它早在那之前就已经停止使用了。
JSR/RET机制最初用于实现最终块。然而,他们认为节省的代码不值得额外的复杂性,因此逐渐被淘汰。
我不知道确切的版本,因为我找不到那么旧的编译器,但是根据我在网上发现的讨论,这种转换似乎发生在Java1.2-1.3时代,不同的编译器在不同的时间切换。我从未见过这些旧编译器中的合法类文件,但您永远不知道何时会发生这种情况。
实际上,我在野外看到的JSR的唯一用途是混淆。例如,使用它作为字符串解密代码。我还在我自己的Java破解中使用过它。
发布于 2014-01-15 23:07:12
根据JVM specification
在Oracle在Java 6之前为Java编程语言实现编译器时,
jsr指令与ret指令一起用于实现finally子句
https://stackoverflow.com/questions/21150154
复制相似问题