如何在windows平台下使用hsdis与jitwatch查看JIT后的汇编码
1. 安装hsids
这一步比较麻烦,需要提前安装cygwin,以及下载openjdk的源码
具体步骤请参考下面的两篇文章
How to build hsdis-amd64.dll and hsdis-i386.dll on Windows
编译时还遇到两个小坑
a. 使用最新的binutils-2.29无法编译成功,最后只能下载binutils-2.27的包重新编译
b. make的时候使用-j4参数希望加速编译,结果反而编译失败,只能去掉-j4参数继续单线程编译,比较慢
编译完成后,将/hsdis/build/Linux-amd64里生成的hsdis-amd64.dll文件复制到$JAVA_HOME/jre/bin/server里即可
2. 用hsdis查看JIT后的汇编码
参考这篇文章
3. 用jitwatch更方便的查看JIT后的汇编码
如果我们使用加-XX:+PrintAssembly参数的方法直接查看JIT后的汇编代码,会得到很多很多的结果,非常难以看懂。
还好有个叫做jitwatch的工具可以帮助我们分析。
安装方法:
a. 去jitwatch的github主页上下载源码,download zip就行了
b. 确定电脑上已经安装了maven3组件,然后在解压后的jitwatch源码目录里执行mvn clean compile exec:java
c. jitwatch的图形界面启动,如下图所示

使用方法:
a. 使用-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=jit.log 参数启动你的应用程序,然后工作目录下就会产生一个名为jit.log的文件了,里面内容很多,试图人肉分析基本是徒劳的。
b. 运行jitwatch,点击"Open Log"按钮,加载jit.log文件
c. 点击"Config"按钮,设置应用的源码路径和编译后的Class路径,如下图所示:

d. 点击"Start"按钮,然后在左边的树形图里选择自己想要分析的Class,然后右边点击method,就会弹出汇编码分析界面了,如下图所示:

e. 分析界面分为左中右三栏,左边为java源码,中间为java字节码,右边为jit后的汇编码,如果进行过多次jit编译,还能分别查看编译结果,如下图所示:

总之,hsdis+jitwatch用起来还是比较方便的(虽然安装起来确实比较费劲),推荐使用
如何在windows平台下使用hsdis与jitwatch查看JIT后的汇编码的更多相关文章
- 如何在Windows平台下安装配置Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一 ...
- JavaMail在Windows平台下正常发送邮件,部署到Linux后则发送失败
问题: 在本机(Windows)环境下可以成功发送邮件,但部署到Linux服务器上后不能成功发送,前台不提示错误或提示502. linux下日志提示:javamail isssl false.... ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
- Windows平台下搭建Git服务器的图文教程
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在window ...
- Windows平台下搭建Git服务器的图文教程(转发)
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在window ...
- 如何在Windows平台使用VS搭建C++/Lua的开发环境
转自:http://ju.outofmemory.cn/entry/95358 本文主要介绍如何在Windows平台利用VS搭建C++/Lua开发环境.这里的“C++/Lua开发环境”主要指的是C++ ...
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- Windows平台下的读写锁
Windows平台下的读写锁简单介绍Windows平台下的读写锁以及实现.背景介绍Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(Initialize ...
- [转]Windows平台下安装Hadoop
1.安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件 ...
随机推荐
- PHP判断类型的方法
1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...
- RegExp & bug
RegExp & bug translated bug // OK && tranlate `/` let new_obj_reg = new RegExp(`^(([^< ...
- [STL] STL各容器实现原理
STL共有六大组件1.容器 2.算法 3.迭代器 4.仿函数 6.适配器 STL容器的实现原理 STL来管理数据十分方便,省去了我们自己构建数据结构的时间.其实,STL的实现也是基于我们常见的数据结构 ...
- (转)java中equals和等号(==)的区别浅谈
java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==) ...
- hdu 2838 Cow Sorting (树状数组)
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 菜单 & 工具栏 & 状态栏
MFC中ON_UPDATE_COMMAND_UI和ON_COMMAND消息区别 CCmdUI 加载状态栏 加载工具栏
- Link Cat Tree (连喵树) 学习笔记
Link Cat Tree 一.感性定义 所谓连喵树,即一种对森林支持修改,查询,连边,删边等操作的数据结构(姑且算她是吧).她用一颗颗互相连接的辅助树维护原森林的信息,辅助树相互连接的边叫虚边,辅助 ...
- 【BZOJ1458】士兵占领 最大流的模板题
我们只要把他们可以有的限制用流量限制,再用两者关系限制一下就可以开心的跑了. #include <cstdio> #include <cstring> #include < ...
- SCOI 股票交易 单调队列优化dp
这道题 我很蒙.....首先依照搞单调队列优化dp的一般思路 先写出状态转移方程 在想法子去优化 这个题目中说道w就是这一天要是进行操作就是从前w-1天转移而来因为之前的w天不允许有操作!就是与这些天 ...
- 整理一些JavaScript时间处理扩展函数
在JavaScript中,时间处理是经常需要用到的.最近想要慢慢建立自己的代码库,整理了几个之前用到的js处理时间的函数,发出来跟大家分享一下,以后的使用中会不断增加和修改代码库. 把字符串转换为日期 ...