实例分享CompileCommand如何查看jit编译(mac环境)!
反汇编命令:
-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,来自@看点代码再上班,如果觉得文章有用,欢迎关注我呀!】
为什么私有方法上的Spring Cache注解不生效?
我是tin阅读 1.5k
Java8的新特性
codecraft赞 32阅读 27.3k评论 1
一文彻底搞懂加密、数字签名和数字证书!
编程指北赞 71阅读 33.3k评论 20
Java11的新特性
codecraft赞 28阅读 19.2k评论 3
Java5的新特性
codecraft赞 13阅读 21.7k
Java9的新特性
codecraft赞 20阅读 15.2k
Java13的新特性
codecraft赞 17阅读 11.1k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。