JVM执行篇:使用HSDIS插件分析JVM代码执行细节

2011 年 10 月 31 日

在《Java 虚拟机规范》之中,详细描述了虚拟机指令集中每条指令的执行过程、执行前后对操作数栈、对局部变量表的影响等细节。这些细节描述与 Sun 的早期虚拟机(Sun Classic VM)高度吻合,但随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述产生越来越大的差距,虚拟机规范中的描述逐渐成了虚拟机实现的“概念模型”——即实现只能保证规范描述等效。

基于上面的原因,我们分析程序的执行语义问题(虚拟机做了什么)时,在字节码层面上分析完全可行,但分析程序的执行行为问题(虚拟机是怎样做的、性能如何)时,在字节码层面上分析就没有什么意义了,需要通过其他方式解决。

准备工作

分析程序如何执行,通过软件调试工具(GDB、Windbg 等)来断点调试是最常见的手段,但是这样的调试方式在 JVM 中会遇到很大困难,因为大量执行代码是通过 JIT 编译器动态生成到 CodeBuffer 中的,没有很简单的手段来处理这种混合模式的调试(不过相信虚拟机开发团队内部肯定是有内部工具的)。因此我们要通过一些曲线手段来解决问题,基于这种背景下,本文的主角——HSDIS 插件就正式登场了。

HSDIS 是由 Project Kenai( http://kenai.com/projects/base-hsdis)提供并得到 Sun 官方推荐的 HotSpot VM JIT 编译代码的反汇编插件,作用是让 HotSpot 的 -XX:+PrintAssembly 指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释,这样我们就可以通过输出的代码来分析问题。读者可以根据自己的操作系统和 CPU 类型从 Kenai 的网站上下载编译好的插件,直接放到 JDK_HOME/jre/bin/client 和 JDK_HOME/jre/bin/server 目录中即可。如果没有找到所需操作系统(譬如 Windows 的就没有)的成品,那就得自己拿源码编译一下,或者去 HLLVM 圈子( http://hllvm.group.iteye.com/)中下载也可以。

原文链接:【 https://www.infoq.cn/article/zzm-java-hsdis-jvm 】。未经作者许可,禁止转载。

登录后可解锁全站优质内容

免费畅享技术公开课、顶尖技术团队访谈、一线互联网大厂技术实践

文章
视频
电子书
研究报告
立即登录
2011 年 10 月 31 日 01:45 14272

评论

发布
暂无评论
发现更多内容

基于小程序云Serverless开发微信小程序

应用研发平台EMAS

手动实现mini-vue

晓枫

JavaScript vue.js

架构训练营第十周感悟

张锐

职业发展的迷茫与困境:你真的了解晋升机制吗?

伴鱼技术团队

职业规划 技术管理 技术交流 职业成长 技术人生

Lambda架构已死,去ETL化的IOTA才是未来

易观大数据

致力打造下一代云原生分布式消息系统,StreamNative 完成源码资本数百万美元 Pre-A 轮融资,红杉中国种子基金跟投

Apache Pulsar

kafka Apache Pulsar StreamNative

【FCC前端教程】44关学习CSS与CSS3基础「一」

三钻

CSS css3 程序员成长 前端训练

浅析Python3列表操作之*和*=

王坤祥

Python Python基础

Python中list操作之append、extend

王坤祥

Python Python基础

iOS Abort问题系统性解决方案

应用研发平台EMAS

ios 监控 移动

下载的附件名总乱码?你该去读一下 RFC 文档了!

Java课代表

Spring Boot

Dubbo微服务调用过程时序图

2流程序员

【架构师训练营】第 10 周作业

花生无翼

憋再PS抠图了,3行代码给你安排的明明白白!

王坤祥

生产力 图像识别

微服务、中台和 DDD

dongge

架构训练营第十周作业

张锐

让我们慢慢地成长

姜海天

个人成长

【FCC前端教程】28关学会HTML与HTML5基础

三钻

CSS html 前端 前端训练

架构师训练营第十周学习总结

Bruce Xiong

架构师训练营——第10周学习总结

jiangnanage

架构师课程第十周总结

dongge

Django单元测试用法及Fixtures用法

Young先生

Python django 单元测试 Fixtures

架构师第十周

Tulane

week10 作业

雪涛公子

Dubbo的服务注册与调用

superman

微服务架构关键点思考

dony.zhang

威联通(NAS)应用篇:搭建个人图床

Young先生

图床 NAS QNAP 威联通 自建

【数据结构与算法】如何高效学习数据结构与算法

三钻

学习日记 数据结构与算法 学习法

服务化问题与方案简述

superman

微服务 微服务架构 服务化改造

架构师课作业 - 第十周

Tulane

架构师训练营——第 10 周作业

jiangnanage

众安黑客马拉松大赛总决赛-InfoQ小编探班

众安黑客马拉松大赛总决赛-InfoQ小编探班

JVM执行篇:使用HSDIS插件分析JVM代码执行细节-InfoQ