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