BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

借助JITWatch理解HotSpot JVM的JIT

| 作者 臧秀涛 关注 4 他的粉丝 发布于 2014年8月14日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

在开发Java应用时,Oracle的HotSpot JVM无疑是应用最广的Java虚拟机。它以解释加编译的方式执行字节码文件。一般是先解释执行,当方法调用次数或循环次数超过某个阈值时,就启动JIT编译。而且JIT采用了很多优化技术,它会根据运行时的实际情况针对性地进行优化。这就给我们理解背后的具体机制造成了困难。

通过hsdis插件获得HotSpot执行时产生的汇编代码,这是一种研究方式。但这种方式不够直观,而且需要使用者熟悉汇编语言。JITWatch可以帮助我们。

JITWatch是由Chris Newland开发的一款HotSpot JIT编译器日志分析工具,它可以分析JVM产生的hotspot.log文件,并以可视化的方式将JIT执行时的信息显示出来。开发该工具的目标就是为了更好地理解HotSpot和JavaFX。

Chris Newland列举了使用该工具的几大理由:

  • 验证性能关键的代码在程序执行时是不是被JIT编译了。
  • 了解性能关键的代码是何时被编译的。
  • 将调校JVM编译阈值的效果以可视化方式显示出来。
  • 更好地理解HotSpot JIT编译器。
  • 有一个检查方法的字节码和汇编代码的漂亮界面。

其功能包括:

  • 浏览类树,查看哪个方法被JIT编译了,JIT编译何时发生的,以及编译相关信息。
  • 加载源代码、Jar包和类树,以支持跳转到方法的源代码、字节码或汇编代码。
  • 基于时间绘制JIT编译图,可视化地显示一个方法被JIT编译的时机(如下图所示)。
  • 查看最大的原生方法、字节码最多的方法、编译时间最长的方法的排行榜。

该项目的源代码基于简化的BSD协议开放。读者可以从其GitHub页面下载源代码或编译好的二进制文件。

Chris Newland的这个讲稿介绍了HotSpot的JIT背景知识和JITWatch的使用,感兴趣的读者可以参考。Oleg Shelajev的Why it rocks to finally understand Java JIT with JITWatch一文则通过一个具体的案例一步步地介绍了这款工具的使用,也可以作为参考。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT