当前位置: 首页 > 知识库问答 >
问题:

我不会在JVM实现中低估这个操作码

杜彦君
2023-03-14

我正在写一个JVM。我一个接一个地实现所有的操作码,直到我遇到了dup2。oracle指令集https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.dup2说

复制操作数堆栈上顶部的一个或两个值,并按原始顺序将复制的一个或多个值推回操作数堆栈

我该如何选择要执行的操作?我怎么知道应该只复制顶部还是复制顶部的两个值?

共有1个答案

酆高翰
2023-03-14

操作码说明如下:

表格1:

..., 价值2,价值1→

..., 值2,值1,值2,值1

其中value1和value2均为1类计算类型的值(§2.11.1)。

表格2:

...,值→

..., 价值,价值

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

第2类为长型和双型,第1类为其他类型。因此,在Java的原始版本中,类别2表示64位类型,类别1表示32位类型。当引入64位JVM时,这种区别不再有效。现在,解释器或JIT编译器需要跟踪从操作堆栈中推送和弹出的值的类别,以确定堆栈顶部的值是类别1还是类别2。

请注意,JVM需要在验证时进行此类分析,以检查4.10.1.7中列出的要求。类型检查装载和存储说明

 类似资料:
  • 问题内容: Node.js有点新,所以我几乎无法在Internet上找到东西。我已经解决了。这是因为我是使用来从客户端呼叫的。但是,当我在下面的代码中尝试使用它时,它永远不会呈现。初始页面是/ contact,当我调用/ contact / sendEmail时,/ contact / sendEmail中的所有功能都可以使用,但渲染时不起作用。完全没有错误。就像什么都没有发生。 它被这个函数调用

  • 我最近在开发一个对JVM字节码执行操作的库时遇到了一些操作码,这些操作码没有文档(我找到了),但JVM参考实现可以识别它们。我找到了一个清单,它们是: 它们似乎是其他实现的替代品,但有不同的操作码。在谷歌上一页又一页地搜索了很长一段时间后,我在这篇文档中遇到了一个关于LDC*_QUICK操作码的提到。 在操作码上引用它: 操作从常量池推送项 表格ldc_quick=203(0xcb) 堆栈项目 说

  • 为什么会引发主线程上的网络异常?its在异步任务上 } 编辑: 完整代码: logcat:

  • 有人能帮我解决这个错误吗?我的应用程序运行正常,但当点击活动按钮,它崩溃,出现此错误logcat。总之,我的. so文件在jniLibs文件夹中。 12-26 12:02:12.393 22612-22612/com.project.voicechangerE/AndroidRuntime: FATAL EXCEPTION:主进程:com.project.voicechanger, PID: 22

  • 作为这个问题的后续:(如何在位图上绘制清晰的文本(Winforms)?),我通过计算文本下面的“平均”颜色,并为文本选择适当的对比色,在位图上绘制清晰但很小的文本。 我从https://stackoverflow.com/A/6185448/3784949偷了Till的代码,用于计算“平均”bmp颜色。现在我来看看http://www.w3.org/tr/aert#color-carrist建议的