当前位置: 首页 > news >正文

解释器指令入口——转发表

解释器指令入口——转发表

JVM虚拟机当执行到某个字节码指令时,并不是像想象中的采用下列C语言的形式执行

void Execute(ByteCode code){ switch(code){ case NOP: do_nop(); break; case ACONST_NULL: do_aconst_null(); break; ... } }

之所以hotspot不能用上述方法的原因是计算机的流水线会由于分支判断而冲刷,因此采用查表的方式。

考虑到JVM模拟栈式计算机,栈式计算机每次计算后的结果都保存在栈顶,x86架构下其结果保存在rax寄存器中。为了充分利用CPU的流水线机制,hotspot根据栈顶的状态配合一张转发表来决定下一条指令的用法。该表保存了各个字节的具体实现的入口地址。当JVM在逐个执行字节码的指令时,CPU会查表直接加载各指令实现的汇编序列,这样可以有效地利用CPU的流水线机制以提高计算机执行的速度。

转发表

转发表是一个二维表,该表有2列,一列为栈顶状态,一列保存字节码

栈顶状态在_x86中就是rax中保存的值的类型

转发表的定义如下

classDispatchTable{public:enum{length=1<<BitsPerByte};//字节码个数,256个private:address _table[number_of_states][length];

其中,number_of_states是栈顶的状态个数,栈顶状态定义如下

enumTosState{// describes the tos cache contentsbtos=0,// byte, bool tos cachedztos=1,// byte, bool tos cachedctos=2,// char tos cachedstos=3,// short tos cacheditos=4,// int tos cachedltos=5,// long tos cachedftos=6,// float tos cacheddtos=7,// double tos cachedatos=8,// object cachedvtos=9,// tos not cachednumber_of_states,ilgl// illegal state: should not occur};

转发表的布局如下

栈顶状态字节码
btos0x0 (nop)
btos0x1 (aconst_null)
btos0x2 (iconst_m1)
ztos0x0 (nop)
ztos0x1 (aconst_null)
ztos0x2 (iconst_m1)

解释器的转发表定义如下

/*templateInterpreter.cpp*/DispatchTable TemplateInterpreter::_active_table;

JVM虚拟机初始化对该表进行了初始化操作

/*templateInterpreterGenerator.cpp*///生成解释器所需要的一切内容voidTemplateInterpreterGenerator::generate_all(){...// Bytecodes
http://www.jsqmd.com/news/588131/

相关文章:

  • 书匠策AI:期刊论文创作的“智能导航仪”,让学术之路畅通无阻
  • 省面90 分学员复盘:杨森老师的 “神算子” 教学法,如何实现高分断层?
  • 把 Antigravity 用成一个更像 VS Code 的 AI IDE
  • 大语言模型并非所有层都必要
  • 免费电脑重启还原工具
  • 零中频接收机设计避坑指南:从IQ信号处理到链路预算,这些细节ADS仿真时千万别忽略
  • 4月3日打卡
  • 鼠标连点效率革命:MouseClick智能自动化工具全解析
  • C# ArrayList
  • 魔因漫创 Moyin Creator
  • 智慧桥梁裂缝缺陷检测识别 桥梁结构健康监测、自动化巡检、安全隐患预警桥梁裂缝识别 图像数据集第10638期
  • Cursor AI 开发环境配置:告别依赖冲突,用 Conda 虚拟环境管理你的数据科学项目
  • Serverless社区
  • DNF 下载 RPM 依赖包及忽略特定依赖的方法
  • 用lazarus封装了linux的rsync
  • 成都拉布灯箱技术白皮书:2026年户外广告新趋势解析
  • TimescaleDB实战:5分钟搞定物联网传感器数据存储与查询(附Grafana配置)
  • 2026鸿蒙应用开发Kuikly:驱动高效落地的核心实践
  • Buildroot与Qt5的X11VNC集成:解决EGLFS与XCB插件冲突的实践指南
  • 如何快速构建微信视频号直播数据管道:5大核心特性深度解析
  • ToonFlow
  • PLC控制四轴攻丝机全伺服工程案例(含接线图):附带启动停止原点定位等控制指令详解及文本屏即用程序
  • python_获取飞书审批数据
  • 可独立部署的健身饮食管理推荐:wger,Docker一键安装部署教程
  • 计算机网络 之 【TCP协议】(面向字节流、TCP异常情况、保活机制、文件与Socket的关系、网络协议栈的本质)
  • 深度解析ComfyUI-Easy-Use中Flux采样器Guidance参数的技术实现与优化策略
  • 音频转换神器fre:ac:让无损音乐管理更简单
  • 手把手教你拆解Coze‘城市觉醒’工作流:从提示词工程到插件调用的保姆级避坑指南
  • 腾讯上线小程序版 Agent[特殊字符],微信文件直接甩给 AI,还能操控家里电脑
  • 实战派】COMSOL土石坝滑坡模拟:手把手带你看懂网格变形骚操作