为了账号安全,请及时绑定邮箱和手机立即绑定

java中的普通指令和快速指令有什么区别(例如aload和fast_aload)

java中的普通指令和快速指令有什么区别(例如aload和fast_aload)

蝴蝶不菲 2023-06-04 10:23:32
我打印出一个简单 java 程序的执行字节码,并注意到一些 java 指令是 fast_xxxx 而不是正常指令。我在 JVM 规范中找不到任何相关信息。那么这些指令之间到底有什么区别以及解释器何时/为什么选择使用这些指令呢?编辑:字节码是用-XX:TraceBytecodes选项打印的。
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

那么这些指令之间到底有什么区别呢?

简而言之:fast_变体是优化的架构相关指令替换

这些优化从何而来?

JVM 模块解释器。它可以在非补丁和补丁模式下工作。一些相关的 JVM 选项:

RewriteBytecodes- 允许重写字节码

RewriteFrequentPairs- 将常用的字节码对重写为单个字节码

- 包含一些快速字节码的定义(参见参考资料 Bytecodes::initialize()),其中一组快速字节码被定义。此外,可以在依赖于平台的代码区域中定义快速字节码。重写的字节码依赖于架构。好吧,至少,其中一些是,而另一些则不是。

口译员什么时候/为什么选择使用这些?

JVM 具有重写字节码流的能力,例如组合通用指令对。至少大多数(如果不是全部)到fast_版本的字节码转换只是为了性能而完成的,并且可以被禁用。这样做会影响口译员的表现。


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信