【发布时间】:2018-04-25 03:12:37
【问题描述】:
我目前正在开发 Java 反编译器。
我阅读了 JVM 规范,我知道pop2 可以操作一个堆栈值(类别 2 值)或两个堆栈值(其他类别值)。
我只想知道pop2 的两个堆栈值操作何时会发生?谁能给我看一些Java源代码,其编译结果包含两个堆栈值操作pop2?
【问题讨论】:
-
pop2(或 JVM 中的任何指令)仅在 one 堆栈上运行。也许您的意思是“堆栈值”(JVM 堆栈中的术语)。您的问题目前的编写方式没有多大意义。在任何情况下,pop2 都会弹出 2 个类别 1 的值(每个类别 1 的值是 32 位,因此它会从堆栈中弹出 64 位)。或者它弹出 1 个类别 2 值(每个类别 2 值是 64 位,因此它再次从堆栈中弹出 64 位)。 pop2 只是从堆栈中弹出 64 位或 8 个字节。
-
@ErwinBolwidt 对不起,我的意思是“堆栈值”。我已经更正了我的问题。
-
@ErwinBolwidt 我认为 Stephen C 给了我一个合理的答案。
标签: java bytecode decompiler