hsdis java_聊聊JVM(十)Mac下hsdis和jitwatch下载和使用 | 学步园

hsdis能够查看Java生成的汇编代码,具体的可以查看上面这篇文章。这里提供一下Mac下的hsdis-amd64.dylib和hsdis-amd64.so文件的下载地址http://pan.baidu.com/s/1i3HxFDF

免得还要重新去编译。前者是Mac 64位机器下的,后者是Linux 64位机器下的。

下载下来hsdis之后,最简单让java命令加载它的方法是把它放在一个目录下面,然后export一下这个目录就行,比如在.bashrc下面

export LD_LIBRARY_PATH=~/Documents/hsdis/

这样就可以使用hsdis来查看JIT生成的汇编代码了。可以用下面的命令来查看hsdis是否工作

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version

看到下面这个结果证明hsdis已经配置正确了

aa65911a187c2290ae6c8f92b675d6fb.png

下面来试一下用hsdis来生成一个类的汇编码。

java -server指令指定了JIT使用C2编译器来优化,-Xcomp选项指定了JVM以编译模式运行,否则默认是Mix模式,只有热点代码才会被JIT编译优化。很多人说写的类没有被JIT编译,我的经验是这个类如果有main方法就会生成汇编码。-XX:+PrintAssembly 可以打印汇编码。执行下面命令可以让JIT编译并把结果生成到指定的log文件中

java -server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading -XX:+PrintAssembly -XX:+LogCompilation

-XX:LogFile=jit.log test.TestMain

可以用jitwatch工具来查看刚生成的日志文件。 jitwatch可以从http://pan.baidu.com/s/1i3HxFDF 下载。我放了一个jitwatch.sh在里面,下载下来之后改一下文件中的路径就可以直接运行了。

用jitwatch可以看到哪些方法被JIT编译了

01a556a09dc08ad7ede03111e657df54.png

在调用一个方法后,会设置OopMap状态,这是一个safepoint

d4ef4b8e8d3af370019038da9234f7de.png

在方法返回前,会插入safepoint polling page的代码 test %eax, 0xxxxxxx,以便让线程进入到这个safepoint的时候可以被阻塞

bf528f83ec570488555653173b02dd89.png

hsdis和jitwatch是学习JVM的利器,下载下来用一用吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值