我什么时候可以在从 Java 源代码编译的 .class 文件中获得 pop2 操作码?

建兰

我目前正在研究 Java 反编译器。

我阅读了 JVM 规范,我知道pop2可以操作一个堆栈值(类别 2 值)或两个堆栈值(其他类别值)。

我只想知道什么时候pop2可以发生两个堆栈值操作谁能给我看一些编译结果包含两个堆栈值操作的 Java 源代码pop2

斯蒂芬·C

根据我对javacJava 8 中编译器源代码的简要阅读,没有地方会发出 aPOP2以从堆栈中弹出 2 个类别 1 值。如果需要弹出两个类别 1 值,则POP编译器将发出两个字节码。

注意事项:

  • 我只看了一个版本的 OpenJDKjavac编译器
  • 还有其他(非 Sun/Oracle)Java 字节码编译器
  • 字节码可以通过其他方式生成或修改......包括代码混淆器!

POP2在 JIT 编译器出现之前,早期 Java 字节码编译器中使用了 的二值弹出行为是合理的但是现在我们有JIT编译,有没有点在字节码编译器“优化”两个POP字节码的POP2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么要使用invokevirtual操作码来调用Java中的最终方法

直接编辑.class文件,使用操作码进行播放

Linux内核中UD2操作码的目的是什么?

什么时候在 PHP 中引入了 STRLEN 操作码?

const类和const方法类型的操作码有什么作用?什么Java代码生成它们?

是否可以从类文件中看到JVM操作码?

CLR中的castclass操作码的目的是什么?

Chrome中的“操作码-1”是什么意思?

为什么操作码中没有显示 if 语句?

汇编,机器代码,字节码和操作码之间的实际关系是什么?

Java编译器在首次访问后省略getfield操作码是否合法?

哪种Java代码将迫使javac 1.6使用“交换”和“ nop”操作码?

NSIS - 使用重新安排的操作码进行编译以防止访问源代码

如何将操作码中ASM的API版本映射到Java版本?

我仍然无法将.class反编译为.java源代码,但仍安装了增强类反编译器?

Java源代码中的“ .class”到底是什么

MIPS中的操作码中的la和li有什么区别?

有人可以解释ARM中的分支操作码吗?

JVM为什么会有icont_2-iconst_5操作码?

如何在cython中克隆功能?我收到SystemError:未知操作码

为什么在MIPS 32位架构中操作码为6位长

汇编:为什么某些x86操作码在x64中无效?

为什么ILGenerator.Emit()在动态汇编中插入nop操作码?

编译时Java没有在源代码中获取文件

JVM中的非法操作码

这些操作码有什么作用?

什么是8086 ESC指令操作码

是否可以通过编程方式仅在内存中编译Java源代码?

“重新编译源代码”是什么意思?在java中