作者介绍
我是挖坑的张师傅,vim 党。从事 Java 开发六年多,做过安卓,现在深耕后台开发,在 CVTE 担任技术经理,带一个 20 多人的开发团队做教育相关的产品。
因为喜欢保持简单,自己花了一些时间造了很多轮子,比如 REST 服务端框架、数据库连接池、SQL 执行框架、类 Dubbo 的 RPC 调用框架、自己实现 Gossip 协议、延时队列等。
曾有一段时间花了半年一个人吭哧吭哧做了一个无侵入的字节码注入的 APM
平台(跟听云、newrelic
一样的项目),对整个后端调用栈做了监控。把字节码操作玩的炉火纯青,顺手无侵入的破解了一系列Java
系软件。
书籍介绍
也许你写了无数行代码,会用很多炫酷的语法糖和高级的框架,但你未必了解这些高级语言背后的执行过程。即使对于一名经验丰富的 Java 程序员,在阅读 Java 字节码的时候也会感到很枯燥。我们为什么需要深入了解如此底层的信息呢?
01 知其然到知其所以然,理解花里胡哨语法糖背后的实现原理
- 有没有深究过「finally 代码块一定会执行」这个耳熟能详的规则背后真实的原因?
- 有没有好奇过 Kotlin 的 when 语法、Coroutine 是如何实现的?
- 有没有研究过 Spring AOP 背后的实现原理?
02 可以实现各种JVM 黑科技
- ZeroTurnaround 公司开发的 JRebel 插件实现了热部署,XRebel 插件实现了开发调试阶段的性能分析利器;
- fastjson 使用字节码改写技术避免了反射的开销,大大提高了反序列化的性能;
- 不修改原始 jar 包的情况下,实现软件的破解?
03 无侵入应用性能监控(APM)的基石
从国外的 NewRelic 到国内大火的听云、OneAPM,到最近微信和 360 都开源的安卓端 APM,都是基于字节码改写来实现了强大的探针监控功能,可以在不改一行代码的情况下,实现移动端到后端的全链路监控,通过慢交互、慢加载、调用链等,快速查明故障域,定位性能瓶颈
适合人群
- 对 Java 有了初步了解,想深入学习内部运行细节的同学;
- 想对 Java 面试题有深刻理解的同学;
- 想了解如何实现 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 字节码注入的代码实现
- 道阻且长,行则将至