作品简介
本书一共12章,从逻辑上主要分为字节码原理篇和应用篇两大部分。第1章详细剖析了class文件的内部结构,帮助读者理解本书后面介绍的字节码原理。第2章首先介绍了什么是字节码,接下来介绍了Java虚拟机栈和栈帧的相关内容,然后通过for循环、switch-case、try-catch-finally等语法讲解了字节码指令的用法。第3章介绍了字节码的进阶知识,主要目的是让读者掌握方法调用指令、泛型擦除、synchronized关键字、反射的底层实现原理。第4章介绍了javac编译器的原理。编译原理是计算机科学皇冠上的明珠,只有弄懂了javac才能更好地理解字节码的生成原理。本章一开始介绍了javac源码的调试方法,随后详细介绍了javac编译的七大阶段和各阶段的作用。第5章从字节码角度看Kotlin语言,介绍了常见语法糖和协程等的原理,希望读者在学习其他JVM系语言时可以举一反三,使用类似的思路。
第6章介绍了ASM和Javassist两个字节码操作工具。这两个工具非常重要,被广泛用于中间件框架中,后面关于APM、软件破解的章节都涉及这两个工具的使用。第7章介绍了Java Instrumentation的原理,分两种方式讲解了如何使用Instrumentation,最后介绍了Attach API的底层UNIX域套接字的通信原理。第8章介绍了JSR 269插件化注解处理的原理,希望读者可以通过本章掌握编译期间生成、修改代码的方法,理解Lombok、ButterKnife工具的实现原理。第9章主要介绍了字节码在cglib、Fastjson、Dubbo、JaCoCo、Mock这些框架上的应用,可以让读者接触到更多字节码的使用场景。第10章主要介绍了反编译、破解、防破解和逆向工程的相关内容。了解常见的破解和逆向方法能更好地保护自己的软件产品。第11章介绍了APM的概况、分布式跟踪的基本原理、OpenTracing的基本概念和无埋点字节码插桩的代码实现。如果对APM有兴趣,可以将本章作为入门指导,实现自己的APM产品。第12章详细介绍了Android dex文件的组成结构,以及Android字节码指令与Java字节码指令的区别,最后介绍了Gradle字节码改写实现无侵入插桩的方法。
张亚,资深后端工程师和Java工程师,CVTE(视源股份,股票代码:002841)高级技术经理,带领20多人的研发团队做教育相关的产品。主要方向是JVM调优及故障诊断、TCP源码剖析、高并发系统设计,致力于后端底层技术细节的研究。独立实现了公司级全链路APM产品,在字节码、ASM、软件破解等方向有丰富的实战经验。vim狂热爱好者,热衷分享,是掘金平台的优秀作者,在掘金上撰写过两本关于JVM和TCP底层原理的小册子。