查看原文
其他

一本书带你理解JVM字节码,实现各种JVM 黑科技

新书速递 脚本之家 2022-04-23

脚本之家

你与百万开发者在一起


如果你从事Java开发,无论是做业务开发还是高性能中间件开发,Java字节码都是必须要掌握的技能。在Java领域,字节码的应用很普遍,动态生成、修改字节码已经在各大主流框架中落地。


《深入理解JVM字节码》从原理和应用深入剖析字节码,由浅入深地全方位引导读者探究字节码,揭示Java性能优化、软件破解、APM黑科技。


本书把JVM的底层原理,如字节码的执行过程、反射、热加载、javac 编译、OpenTracing 等都讲清楚了,循序渐进,精炼而又不失深度。包含大量高度提炼和总结的图表,非常易于阅读和理解。强烈建议正在学习 Java 语言的读者将本书作为深入理解 JVM 原理的必读书籍。

 



● 4大内容特色 ●


NO.1 作者实力出众

资深Java技术专家、上市公司高级技术经理、掘金平台优秀作者

NO.2 内容系统全面

系统讲解JVM字节码底层原理、使用方法、操作工具、常见使用

NO.3 格外注重实操

详细讲解JVM字节码在反编译、破解、逆向工程、APM等场景应用

NO.4 阅读体验至上

包含大量高度提炼和总结的图表,非常易于阅读和理解





● 12大核心内容●



  • NO.1 Class文件结构深入剖析

  • NO.2 JVM字节码指令和方法调用指令

  • NO.3 Lambda表达式、反射、synchronized实现原理

  • NO.4 javac编译原理

  • NO.5 Kotlin的字节码分析

  • NO.6 字节码操作工具:ASM和Javassist

  • NO.7 Java Instrumentation原理

  • NO.8 JSR 269插件化注解

  • NO.9 字节码在Fastjson、Dubbo等上的应用

  • NO.10 软件破解/防破解/逆向工程

  • NO.11 全链路分布式跟踪和APM

  • NO.12 Android字节码与APM

 




● 作者介绍●


张亚

资深后端工程师和Java工程师,CVTE(视源股份,股票代码:002841)高级技术经理,带领20多人的研发团队做教育相关的产品。


主要方向是 JVM 调优及故障诊断、TCP 源码剖析、高并发系统设计,致力于后端底层技术细节的研究。独立实现了公司级全链路APM 产品,在字节码、ASM、软件破解等方向有丰富的实战经验。


vim 狂热爱好者,热衷分享,是掘金平台的优秀作者,在掘金上撰写过两本关于JVM和TCP 底层原理的小册子。

 





● 专家推荐 ●



《大学》开篇就提到“格物致知”,本书正是秉承这样的思想,深入到虚拟机、字节码等背后深层次的结构和原理来剖析Java。当你深入掌握了这些原理之后,你的代码不管是在整体架构上,还是在开发和运行效率上,都会提升一个档次。

——刘荣(电脑圈圈) CVTE 技术专家

 


这本书对JVM底层知识的讲解非常深入,作者将自己在字节码领域积累多年的经验融汇成了本书,内容深入且全面,可以帮助你拓宽在 JVM 方向上的视野,掌握更多字节码的“黑科技”。

——钱文品(老钱) 前掌阅服务端技术专家

 


很高兴看到介绍字节码的专著问世,如果你从事 Java 开发,无论是做业务开发还是高性能中间件开发,Java 字节码都是必须要掌握的技能。这本书从原理到实战,由浅入深地引导读者探究字节码的方方面面,非常值得一读。

—— 周志明 远光软件研究院院长/《深入理解Java虚拟机》作者

 


本书把JVM的底层原理,如字节码的执行过程、反射、热加载、javac 编译、OpenTracing 等都讲清楚了,循序渐进,精炼而又不失深度。强烈建议正在学习 Java 语言的读者将本书作为深入理解 JVM 原理的必读书籍。

—— 赵成 蘑菇街技术总监

 

 



● 目录 ●

第1章 深入剖析 class 文件结构 1

1.1 初探 class 文件 1

1.2class 文件结构剖析 3

1.2.1 魔数 4

1.2.2 版本号 6

1.2.3 常量池 7

1.2.4Access flags 18

1.2.5this_class、super_name、interfaces 19

1.2.6 字段表 20

1.2.7 方法表 23

1.2.8 属性表 25

1.3 使用 javap 查看类文件 30

1.4 小结 32

第2章 字节码基础 33

2.1字节码概述 33

2.2 Java 虚拟机栈和栈帧 34

2.3 字节码指令 41

2.3.1 加载和存储指令 41

2.3.2 操作数栈指令 42

2.3.3 运算和类型转换指令 45

2.3.4 控制转移指令 46

2.3.5for语句的字节码原理 48

2.3.6switch-case底层实现原理 54

2.3.7String的switch-case实现的字节码原理 55

2.3.8i和i 的字节码原理 60

2.3.9try-catch-finally的字节码原理 63

2.3.10try-with-resources 的字节码原理 71

2.3.11 对象相关的字节码指令 74

2.4 小结 77

第3章 字节码进阶 78

3.1 方法调用指令 78

3.1.1invokestatic指令 79

3.1.2invokevirtual指令 79

3.1.3invokespecial指令 80

3.1.4invokeinterface指令 80

3.1.5invokedynamic指令 90

3.2Lambda 表达式的原理 95

3.3 泛型与字节码 100

3.4synchronized 的实现原理 102

3.5 反射的实现原理 106

3.5.1 反射方法源码分析 107

3.5.2 反射的inflation机制 109

3.6 小结 110

第4章 javac 编译原理简介 111

4.1javac 源码调试 112

4.2javac 的七个阶段 114

4.2.1parse阶段 115

4.2.2enter阶段 116

4.2.3process阶段 118

4.2.4attr阶段 118

4.2.5flow阶段 121

4.2.6desugar阶段 122

4.2.7generate阶段 126

4.3 小结 129

第5章 从字节码角度看 Kotlin语言 130

5.1Metadata 注解 130

5.2 顶层方法 132

5.3object 单例 133

5.4 扩展方法 134

5.5 接口默认方法 135

5.6 默认参数 137

5.7 高级 for 循环 140

5.8data class 142

5.9 多返回值 143

5.10 协程的实现原理 144

5.10.1CPS 介绍 145

5.10.2suspend 关键字 146

5.11 从字节码分析 Kotlin 编译器的bug 149

5.12 小结 153

第6章 ASM 和 Javassist 字节码操作工具 154

6.1ASM 介绍 154

6.1.1ASM Core API核心类 156

6.1.2ASM操作字节码示例 158

6.2Javassist 介绍 169

6.2.1Javassist核心API 169

6.2.2Javassist操作字节码示例 170

6.3 小结 174

第7章 Java Instrumentation 原理 175

7.1Java Instrumentation 简介 175

7.2Instrumentation 与 -javaagent启动参数 176

7.3JVM Attach API 介绍 180

7.3.1JVM Attach API基本使用 181

7.3.2JVM Attach API的底层原理 183

7.4 小结 190

第8章 JSR 269 插件化注解处理原理 191

8.1JSR 269 简介 191

8.2 抽象语法树操作 API 193

8.2.1Names介绍 193

8.2.2JCTree介绍 193

8.2.3TreeMaker介绍 198

8.2.4 自定义注解处理实战 202

8.3JSR 269 在常用框架上的应用 207

8.3.1 案例一:ButterKnife 207

8.3.2 案例二:Lombok 209

8.4 小结 212

第9章 字节码的应用 213

9.1cglib 动态代理原理分析 213

9.2字节码在 Fastjson 上的应用 218

9.3 字节码在 Dubbo 上的应用 221

9.4 字节码在 JaCoCo 代码覆盖率上的应用 222

9.5 字节码在 Mock 上的应用 225

9.6 小结 227

第10章 软件破解和防破解 228

10.1 反编译 228

10.2 软件破解 229

10.3 软件防破解 234

10.4 小结 250

第11章 全链路分布式跟踪与APM 251

11.1 全链路分布式跟踪介绍 251

11.2 见微知著之 APM 260

11.3 小结 273

第12章 Android字节码与 APM 274

12.1dex 文件结构 274

12.2Android字节码 288

12.3Gradle 插件编写 295

12.4Android字节码注入原理 297

12.5 小结 301

 



上下滑动查看



小编为我们喜爱阅读的书迷们免费送书。




留言送书活动规则


留言话题:留言分享您在学习Java编程开发过程中的经验感想,或者其他一些学习经历。(字数不少于12个)
>>> 活动参与
玩法1:机会总是靠自己去争取来的!小编将对留言进行精选,被精选的评论将会显示在页面中(由于微信功能限制,最多只能显示100条)。活动截止时点赞数第1名的朋友将免费包邮送深入理解JVM字节码》一本。
玩法2:小编会从留言中随机抽取2名小锦鲤,同样免费包邮送深入理解JVM字节码》一本,看看谁会这么幸运。



特别申明:


1、一位用户1个月内只能有1次获奖机会,让更多粉丝受益活动才更有意义
2、每一位用户只有1次留言机会,不允许重复留言~
请大家记住这三个1

活动截止时间:2020 年 06 月 11 日 16:00 整。


更多精彩


在公众号后台对话框输入以下关键词

查看更多优质内容!


女朋友 | 大数据 | 运维 | 书单 | 算法

大数据 | JavaScript | Python | 打卡

AI | 人工智能 | 5G | 区块链

机器学习 | 数学 | 留言送书

精选书单 点蓝字即可 


 程序员的人生必做100件事中,一定有读这14本经典!

 程序员该怎么规划自己的成长路径?

 比肩“犀牛书”的《JavaScript编程精解》(原书第3版)重磅来袭!

 去年最畅销的IT类新书《漫画算法》出Python版了!

 “Flutter中文网”社区创始人倾力撰写的网红书《Flutter实战》正式出版

 Go语言之父:发明过航天望远镜,想用Go语言解放程序员!

更多好书请关注脚本之家官方书店

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存