没有合适的资源?快使用搜索试试~ 我知道了~
首页半栈工程师揭秘:JVM模板解释器与字节码执行
半栈工程师揭秘:JVM模板解释器与字节码执行
需积分: 0 0 下载量 77 浏览量
更新于2024-08-05
收藏 504KB PDF 举报
本文主要探讨的是Java虚拟机(JVM)中的模板解释器,它起源于早期的HotSpot JVM实现。模板解释器的概念源于《自己动手写Java虚拟机》这本书,作者通过实例展示了如何将Java的字节码(一种中间语言)转化为可执行的操作,例如使用Go语言实现的iload指令,该指令的功能是将指定的整型局部变量值推送到栈顶。 模板解释器的工作原理是将字节码中的指令转换为可理解的函数调用,如`func_iload(frame *rtda.Frame, index uint)`。在实际运行时,每当遇到iload指令,就会调用这个函数来执行操作。这种方法直观易懂,但效率较低,因为每个字节码指令都需要逐一翻译执行。 早期的HotSpot JVM确实采用了模板解释器作为基础执行引擎,但随着时间的推移,它的性能瓶颈变得明显。由于模板解释器的逐条指令翻译过程会导致较高的性能开销,这与现代高性能计算的需求相违背。因此,HotSpot逐渐引入了其他优化技术,如即时编译器(Just-In-Time Compiler,JIT)和更高级的优化策略,这些技术可以在运行时动态地将频繁执行的部分代码编译成本地机器指令,从而大幅提升执行效率。 总结来说,模板解释器是JVM实现的基础部分,它提供了跨平台执行Java字节码的能力,但为了提高性能,现代JVM采用了混合模式,兼顾解释和编译,以实现更高的执行效率。理解模板解释器的工作原理有助于我们更好地认识Java语言的运行机制,并对JVM优化有更深入的理解。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86306398/bg1.jpg)
12/27/2019 JVM之模板解释器 - 知乎
https://zhuanlan.zhihu.com/p/33886967 1/8
JVM之模板解释器
中华儿女多奇志,不爱无码爱代码
关注他
44 人赞同了该文章
汪先生
欢迎关注我的专栏:半栈工程师
闲来无事,编译调试了下OpenJDK9,仔细研究了下HotSpot中的模板解释器。
一:何为模版解释器
C和C++之类的语言,会在编译期就直接编译成平台相关的机器指令,对于不同平台,可执行文件
类型也不一样,如Linux为ELF,Windows为PE,而MacOS为Mach-O。而写Java的应该都清楚,
java之所以跨平台性比较强,是因为Java在编译期没有被直接编译成机器指令,而是被编译成一种
中间语言:字节码。
2016年我读完周志明的《深入理解Java虚拟机》后,不觉过瘾,便紧接着看完了张秀宏老师的
《自己动手写Java虚拟机》,书中关于如何实现一个小型JVM做了详细讲解,其中一部分就是讲如
何执行Class文件中方法体的字节码。
《自己动手写Java虚拟机》中对于字节码的执行其实就是简单的翻译,比如要实现iload指令(将
指定的 int 型局部变量推送至栈顶),其实就用GO(这本书用GO来实现JVM的)来实现其对应的
功能:
func _iload(frame *rtda.Frame, index uint) {
val := frame.LocalVars().GetInt(index)
frame.OperandStack().PushInt(val)
}
当执行方法中的iload指令时,就直接调用该_iload()方法即可。
这种解释器简单明了,而且容易理解,要是让我们来实现虚拟机,估计想到的也是这种方法(虽然
我没有那个能力)。早期的HotSpot就是通过上面这种方法来解释执行字节码指令的,这种解释器
有个通用的称呼:字节码解释器。目前HotSpot中还保留着字节码解释器,只不过没有使用了。
字节码解释器的优点上面已经说过了,但是缺点也很明显:慢。每个字节码指令都要通过翻译执
行,虽然在用C++写成的JVM中,类似上面_iload()这样的方法,最后也会被编译成机器指令,但
下载后可阅读完整内容,剩余7页未读,立即下载
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/f6c1f95479cb40909e7861a6b1c95d28_weixin_35814757.jpg!1)
yiyi分析亲密关系
- 粉丝: 29
- 资源: 321
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)