哪些Java编译器使用jsr指令,用于什么目的?
Java 字节码语言具有 JSR 指令。
我用Java 7编译器编译的代码都没有使用这个指令。
但是,有时我下载的Java二进制文件确实会使用它,尽管很少。
我很想知道编译器使用该指令,以及哪些Java代码构造会导致他们使用它。
编辑这不是重复的,因为它指的是JSR字节码指令,而不是Java规范请求
Java 字节码语言具有 JSR 指令。
我用Java 7编译器编译的代码都没有使用这个指令。
但是,有时我下载的Java二进制文件确实会使用它,尽管很少。
我很想知道编译器使用该指令,以及哪些Java代码构造会导致他们使用它。
编辑这不是重复的,因为它指的是JSR字节码指令,而不是Java规范请求
JSR 指令实际上甚至在 Java 7 类文件中都是不允许的。它只允许在 V49.0 或更早版本的类文件中使用,对应于 Java 5 或更早版本。在实践中,它早在那之前就已经不再使用了。
JSR/RET 机制最初用于实现最终的块。但是,他们认为节省代码大小不值得额外的复杂性,因此逐渐被淘汰。
我不知道确切的版本,因为我找不到任何那么旧的编译器,但根据我在网上找到的讨论,似乎过渡发生在Java 1.2-1.3时代,不同的编译器在不同的时间切换。我从未见过来自这些旧编译器之一的合法类文件,但你永远不知道它何时会发生。
在实践中,我在野外看到的JSR的唯一用途是用于混淆。例如,Zelix Klassmaster曾经使用它作为其字符串解密代码。我也在我自己的几个Java破解中使用它。