11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

借助 JITWatch 理解 HotSpot JVM 的 JIT

  • 2014-08-13
  • 本文字数:858 字

    阅读完需:约 3 分钟

在开发 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 )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-13 21:563223
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 123.4 次阅读, 收获喜欢 32 次。

关注

评论

发布
暂无评论
发现更多内容
借助JITWatch理解HotSpot JVM的JIT_Java_臧秀涛_InfoQ精选文章