这门课解决什么工作场景

日常写业务代码时,很少需要直接读字节码,但一旦遇到线上问题排查、框架底层原理剖析、或者面试被追问 Java 运行机制,字节码就是绕不开的底层视角。这门课不是教你写业务功能,而是帮你建立“源码到虚拟机执行”之间的映射。它解决的具体场景包括:看懂反编译后的类文件结构、理解多态和方法调用的底层实现、从字节码层面解释常见面试题(比如 i++ 和 ++i 的差异、String 的 switch 实现),以及为后续做 APM 监控、代码生成或性能调优打基础。

适合什么基础,学完能独立做什么

这门课不适合纯零基础。默认你已经熟悉 Java 语法,写过面向对象代码,但对 JVM 内部机制只停留在“知道有堆栈”的层面。如果你写过 Spring 或 MyBatis 但没看过代理类的字节码,或者被 invoke 系列指令搞晕过,这门课正好补这块。学完后,你能独立做几件事:用工具反编译并读懂任意类的字节码结构;解释 Lambda、泛型擦除、自动装箱这些语法糖在字节码层面的真实样子;理解 invokedynamic 为什么是 Java 8 Lambda 的基础;在排查诡异 Bug 或阅读中间件源码时,多一个底层视角的判断依据。课程后半段涉及 APM 和软件破解,属于扩展视野,别指望学完就能直接造一个生产级监控工具,但能理解字节码插桩的基本思路。

建议怎么看,资料怎么配合练习

建议按三段式推进。第一段先过 class 文件结构和基于栈的执行引擎这两块,别急着背指令表,重点是建立“方法执行时栈帧怎么变化”的直觉。第二段啃指令,重点放在对象初始化(new、init、clinit)和方法调用(invoke 五兄弟)这两组,它们覆盖了大部分业务代码的字节码模式。第三段挑语法糖和面试题部分做实战,配合 javap、HSDB 这些工具,拿自己写的代码反编译对比。练习方法:每学一个语法特性,先写最小可运行例子,用 javap -c -v 看输出,对照课程讲解逐行标注指令含义。Lambda 和 invokedynamic 那节建议最后看,前面基础没打牢容易卡住。整门课别贪快,指令集不用全背,但栈帧流转的机制必须吃透,这是后续所有底层阅读的通用能力。


深入剖析 JVM 字节码,带你分析字节码黑科技、破解软件、从零实现一个 APM

课程目录

*   字节码初体验 —— 从 Hello World 说起

*   褪下类文件的外衣 —— 抽丝剥茧看 class 文件内部结构

*   字节码原理初步 —— 基于栈的执行引擎

*   字节码指令之控制转移 —— for 与 switch

*   字节码指令之对象初始化 —— new, <init> & <clinit>

*   字节码指令之方法调用 —— invoke 五兄弟

*   运行时数据窥探 —— 用 HSDB 来探究多态实现的原理

*   动态方法调用秘密武器 —— invokedynamic 指令解读

*   匿名内部类与 lambda —— lambda 表达式背后的字节码原理

*   字节码角度分析面试题 —— i++、++i 傻傻分不清

*   字节码角度看语法糖 —— String 的 switch 实现

*   字节码角度看面试题 —— try catch finally 为啥 finally 语句一定会执行

*   字节码角度看 try with resource 语法糖 —— 资源释放不用慌

*   心有 Java 细嗅 Kotlin —— 字节码细数 Kotlin 优雅的语法糖

*   字节码在手天下我有 —— 深入分析 Kotlin 1.2 处理 when 语法的超级大 bug

*   字节码角度看 synchronized —— 窥探加锁解锁的细节

*   字节码角度看泛型 —— 万恶的擦除

*   深入理解反射实现的原理

*   javac 源码调试和原理解析

*   字节码调教的入口 —— JVM 的寄生插件 javaagent 那些事

*   字节码操作的手术刀 —— 工业级的字节码改写框架 ASM 与 Javassist

*   无处不在的字节码技术 —— ASM 在 cglib 与 fastjson 上的应用

*   破解软件 —— 用直接修改字节码的方式

*   教你用 Java 字节码做点有趣的事 ——无痛破解 Java 系软件

*   代码未动,监控先行 —— APM 简介与分布式跟踪的基本原理

*   化整为零 —— 一个可落地的 APM 整体架构

*   分布式调用跟踪 —— APM 字节码注入的代码实现

*   道阻且长,行则将至