page contents

Java教程——查看Java的汇编指令

本文讲述了Java教程——查看Java的汇编指令!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2023-09-BYHswujk64fa788028e18.jpg本文讲述了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

attachments-2023-09-RlSGlRkB64fa7841c09e9.jpg

如果遇到:

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入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2023-03-2AoKIjPQ64014b4ad30a3.jpg

  • 发表于 2023-09-08 09:27
  • 阅读 ( 254 )
  • 分类:Java开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
王昭君
王昭君

209 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章