没有合适的资源?快使用搜索试试~ 我知道了~
《自己动手写Java虚拟机》中对于字节码的执行其实就是简单的翻译,比如要实现iload指令(将指定的 int 型局部变量推送至栈顶),其实就用GO(这本书用GO
资源详情
资源评论
资源推荐
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()这样的方法,最后也会被编译成机器指令,但
yiyi分析亲密关系
- 粉丝: 22
- 资源: 321
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0