dup和dup_x2之间的区别

时间:2013-06-30 09:08:37

标签: java stack bytecode java-bytecode-asm opcode

我正在玩Java字节码。我读过两个操作码:dupdup2。如果我理解正确,那么它们之间的唯一区别是首先复制一个堆栈字,而第二个复制一堆堆栈字。这很好,但每个都有自己的子代码(dup_x1dup2_x2 ...)。

当我查看例如dup_x2dup2_x1的功能时,它们似乎做同样的事情:按顺序复制前三个值(因此从值val4, val3, val2, val1有{{1 }})。我很困惑,因为没有理由为同一个动作定义两个操作码。

那么这些操作码是什么?他们的行动有官方参考吗?请帮忙。

1 个答案:

答案 0 :(得分:3)

  

他们的行动是否有官方参考?

当然有!它是JVM规范 - 特别是section 6.5

我不会在这里复制它。点击链接,自己阅读。但基本思路是dup_x1dup_x2变体将重复的值/值插入堆栈的下方。

  

我很困惑,因为没有理由为同一个动作定义两个操作码。

仔细查看(在规范中)。他们没有做同样的事情。