网上已经有了详细的hsdis和jitwatch的教材,比如这篇利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码
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/
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version
下面来试一下用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的使用方法可以看这篇利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码
用jitwatch可以看到哪些方法被JIT编译了
在调用一个方法后,会设置OopMap状态,这是一个safepoint
在方法返回前,会插入safepoint polling page的代码 test %eax, 0xxxxxxx,以便让线程进入到这个safepoint的时候可以被阻塞
hsdis和jitwatch是学习JVM的利器,下载下来用一用吧
聊聊JVM(十)Mac下hsdis和jitwatch下载和使用
原文地址:http://blog.csdn.net/iter_zc/article/details/41897137