共计 822 个字符,预计需要花费 3 分钟才能阅读完成。
反汇编命令:
-XX:+UnlockDiagnosticVMOptions
-XX:+PrintAssembly -Xcomp
-XX:CompileCommand=print,*AtomicInteger.incrementAndGet
把这些参数设置到 jvm 启动参数,但个别首次执行会报错:
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
这是因为短少 hsdis-amd64.dylib 导致的,把 hsdis-amd64.dylib 放到 $JAVA_PATH/jre/lib/server/ 目录下即可:
再次运行代码,即能够看到汇编代码输入:
对于 CompileCommand 参数,其格局是这样的:
-XX:CompileCommand=command,method[,option]
该参数用于定制编译需要,比方过滤某个办法不做 JIT 编译,或者打印某个办法汇编代码等。
command 选项有如下:
exclude,跳过编译指定的办法
compileonly,只编译指定的办法
inline/dontinline,设置是否内联指定办法
print,打印生成的汇编代码
break,JVM 以 debug 模式运行时,在办法编译开始处设置断点
quiet,不打印在此命令之后、通过 -XX:CompileCommand 指定的编译选项
log,记录指定办法的编译日志,若未指定,则记录所有办法的编译日志
其余命令,option,help
如上文截图中,-XX:CompileCommand=print,*AtomicInteger.incrementAndGet 即示意把 AtomicInteger.incrementAndGet 办法生成的汇编代码打印进去。
【我是 tin,来自 @ 看点代码再下班 ,如果感觉文章有用,欢送关注我呀!】