本文讲述了Java教程——查看Java的汇编指令!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
通过javap 命令,可以将字节码文件“反编译”。如通过下面的命令:javap -c Xxxx.class
其实,使用javap 命令“反编译”的结果,并不是真正的汇编指令。javap 命令“反编译”的结果是JVM指令助记符,本质上还是JVM层面的指令。
真正的汇编指令是什么,是和平台相关的一堆mov、add、pop等堆栈/寄存器操作。上层语言提供的统一和封装屏蔽了太多实现。
而有时候想看某些JDK底层实现,发现javap反编译得到的代码并没有什么帮助,因此本文介绍如何查看Java的汇编指令,查看Java代码最真实的运行细节。
Java本身提供这个支持,但需要引入而外的包(hsdis-amd64.dylib)。
HSDIS 是由 Project Kenai(http://kenai.com/projects/base-hsdis)提供并得到 Sun 官方推荐的 HotSpot VM JIT 编译代码的反汇编插件,作用是让 HotSpot 的 -XX:+PrintAssembly 指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释,这样我们就可以通过输出的代码来分析问题。
Mac下:https://github.com/evolvedmicrobe/benchmarks/blob/master/hsdis-amd64.dylib
下载下来后,将其放置到jre lib目录下即可。
其他平台,可去(http://hllvm.group.iteye.com/)中下载。
查看Java的汇编指令
1、可以使用命令
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly Main (Main是class文件)
2、在IDEA配置VM options,打印汇编指令,如下图。
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
如果遇到:
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled
下载上面的库文件放到jre/lib下即可。
ps:利用HSDIS还能做很多验证,后续持续更新。
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!