首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不理解JVM实现中的操作码

我不理解JVM实现中的操作码
EN

Stack Overflow用户
提问于 2022-02-26 13:27:55
回答 1查看 119关注 0票数 0

我正在编写JVM。我一直在逐个实现所有的操作码,直到我面对dup2。甲骨文指令集https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.dup2

复制操作数堆栈上的一个或两个值,并按原来的顺序将重复的值推送回操作数堆栈。

我该如何选择执行哪一项手术?我如何知道什么时候应该只复制顶部,或者应该复制前两个值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-26 13:53:40

对操作码的描述是:

表格1:

,value2,value1→

,value2,value1,value2,value1

其中value1和value2都是第1类计算类型的值(§2.11.1)。

表格2:

.,值→

.,价值

其中值是第2类计算类型的值(§2.11.1)。

类别2类型为longdouble,类别1为其他类型。因此,在Java的原始版本中,类别2表示64位类型,类别1表示32位类型。当引入64位JVM时,这种区别不再有效。现在,解释器或JIT编译器需要跟踪从opstack中推入和弹出的值类别,直到它知道堆栈顶部的值是类别1还是类别2。

请注意,JVM需要在验证时进行这种分析,以检查 4.10.1.7. Type Checking Load and Store Instructions 中列出的需求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71277062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档