📚《深入浅出JVM字节码》

《Java虚拟机字节码:从入门到实战》的开源版本。作者通过自己的实战经验,整合出一套适合新手的高效学习教程。归纳并提炼知识点,制定合理路线,帮助读者更快掌握核心技术。


序言

为什么写这本书

笔者曾在学习Java虚拟机字节码的过程中遇到过很多问题,也曾浪费不少时间去查阅资料,在学习ASM框架时,更是苦于找不到系统且详细的介绍ASM框架如何使用的资料,而选择自己看API文档摸索,学习过程中遇到的一些问题都需要花费大量时间去解决。例如,使用IDEA查看字节码反编译后的Java代码看似没问题,但总能遇到各种VerifyError。

在开始写作本书时,市面上还没有一本适合新手入门Java虚拟机字节码的书籍,从网上找的资料也是零零散散,笔者之前也写过一些关于Java虚拟机字节码方面的文章,看到很多读者留言:希望作者能写一篇介绍ASM框架的使用,网上找不到合适的资料,看英文API文档又看不懂、希望作者能详细介绍一下字节码指令的执行过程等。

因此,笔者下定决心一定要完成这本书。本书将归纳以及提炼知识点,为读者制定合理的学习路线,帮助读者更快的掌握Java虚拟机字节码技术,了解字节码背后的执行原理,以及帮助读者快速入门使用ASM框架操作字节码。

读者对象

  • Java开发工程师;

  • Java虚拟机字节码发烧友;

  • 想了解动态代理实现原理的读者;

  • 想了解字节码插桩实现原理的读者;

本书介绍

这本书详细介绍ASM框架的API、Class文件结构解析、HotSpot虚拟机栈大小分配与类加载阶段的源码分析、动态代理与字节码插桩的实现。其内容安排如下:

第一章:介绍Java虚拟机基础知识,了解虚拟机栈、栈帧、局部变量表、操作数栈是理解字节码指令的基础。

第二章:通过使用Java代码结合设计模式实现一个解析class文件结构的工具分析Java代码编译后生成的class文件的结构。

第三章:介绍字节码指令,与学习一门语言一样,学习底层字节码是如何实现各种条件分支语句、循环语句,以及try-catch代码块的。透过字节码了解try-catch-finally是怎么实现的,以及try-with-resource语法糖是怎么实现的。最后分析四条常用的方法调用指令在使用上的区别。

第四章:简析类的加载过程,并介绍双亲委派模型。也为后续章节编写自定义类加载器加载动态生成或改写类的字节码做铺垫。本章深入分析HotSpot虚拟机类加载部分源码,重点介绍字节码验证阶段,探索VerifyError的由来。

第五章:介绍ASM框架的使用、介绍Javassist与ASM的不同点与各自的优缺点。通过使用访问者模式实现一个简单的class字节码操作框架介绍ASM框架的实现原理,帮助读者更好的理解ASM的API。通过使用ASM操作字节码实现创建类和方法、改写类和方法、实现接口、继承父类覆写方法等,熟悉ASM框架的API。

第六章、第七章:通过实战掌握前面所学的知识点,学以致用。所选案例皆是常见的动态字节码技术使用场景。如实现两种不同方式的动态代理、实现APM系统中的字节码插桩。

第八章:补充一些知识点,如类型检查与栈映射桢、泛型以及泛型方法的调用。

本书Class文件结构参考《Java虚拟机规范》Java SE 8版[^1]。

源码下载

打赏作者

wujiuye_dashang


📚目录