发表于2024-11-07
Java工程师高质量成长的必读本,谷歌官方认可的android开发语言Kotlin的基石。看透JVM设计思想与原理,彻底领悟JAVA编程精髓,以不变应万变!
Java是一门非常流行的程序语言,但是,Java程序到底是如何运行的?如何写出更高效的Java代码……?这些令人困扰的问题,都可以从《揭秘Java虚拟机:JVM设计原理与实现》中找到答案。
随着互联网的极速发展,现在的Java服务端应用需要应对极高的并发访问和大量的数据交互,如果能深入地理解Java虚拟机的核心原理和实现细节,不仅可以帮助程序员自如地应对变化莫测的各类状况,也可以帮助程序员写出优秀高效的代码。
《揭秘Java虚拟机:JVM设计原理与实现》正是这样一部修炼Java内功的武学秘笈。它不仅详细阐述了JVM的设计思路与原理,让读者能够深刻理解JVM的运行机制,而且更进一步地分析了JVM在发展过程中每一次技术选择的必然性——这样的分析让读者得以跨越时空,在思想上与前辈大师们产生共鸣,实现精神上的交流,真正领悟JVM的精髓。
更为难得的是,看似艰深莫测的“大道理”,却被作者用晓畅明白、幽默有趣的文字层层化解了:《揭秘Java虚拟机:JVM设计原理与实现》在阅读体验上毫无枯燥之感,相反,却能让你在“顿悟”的当下,会心而笑,不忍释卷!
不必犹豫,无须比较,就是它——《揭秘Java虚拟机:JVM设计原理与实现》!
《揭秘Java虚拟机:JVM设计原理与实现》从源码角度解读HotSpot的内部实现机制,本版本主要包含三大部分——JVM数据结构设计与实现、执行引擎机制及内存分配模型。
数据结构部分包括Java字节码文件格式、常量池解析、字段解析、方法解析。每一部分都给出详细的源码实现分析,例如字段解析一章,从源码层面详细分析了Java字段重排、字段继承等关键机制。再如方法解析一章,给出了Java多态特性在源码层面的实现方式。《揭秘Java虚拟机:JVM设计原理与实现》通过直接对源代码的分析,从根本上梳理和澄清Java领域中的关键概念和机制。
执行引擎部分包括Java方法调用机制、栈帧创建机制、指令集架构与解释器实现机制。这一话题是《揭秘Java虚拟机:JVM设计原理与实现》技术含量高的部分,需要读者具备一定的汇编基础。不过千万不要被“汇编”这个词给吓着,其实在作者看来,汇编相比于高级语言而言,语法非常简单,语义也十分清晰。执行引擎部分重点描述Java源代码如何转换为字节码,又如何从字节码转换为机器指令从而能够被物理CPU所执行的技术实现。同时详细分析了Java函数堆栈的创建全过程,在源码分析的过程中,带领读者从本质上理解到底什么是Java函数堆栈和栈帧,以及栈帧内部的详细结构。
内存分配部分主要包括类型创建与加载、对象实例创建与内存分配,例如new关键字的工作机制,import关键字的作用,再如java.lang.ClassLoader.loadClass()接口的本地实现机制。
《揭秘Java虚拟机:JVM设计原理与实现》并不是简单地分析源码实现,而是在描述HotSpot内部实现机制的同时,分析了HotSpot如此这般实现的技术必然性。读者在阅读《揭秘Java虚拟机:JVM设计原理与实现》的过程中,将会在很多地方看到作者本人的这种思考。
Java从1995年发布以后,已经发展成为一门流行的编程语言。业界也有无数的书介绍Java语言的方方面面。但是,这本书不仅讲解了Java虚拟机的内部实现机制,还深入分析了为什么要这么实现。每一种技术设计的背后,都有其必然性。能够知其然、并知其所以然,才能透过现象看本质,举一反三,实现技术升华。亚飞有多年的Java实践,尤其是在菜鸟网络,需要具备处理很多高并发、大型工程的架构经验,相信他在书中会有更多的视角分享给读者。
——王文彬(菲青),菜鸟CTO
作者凭借资深的C与Java技术功底以及多年对于JVM的深入研究编写的这边书,真正从虚拟机指令执行处理层面,结合JVM规范的设计原理,完整和详尽地阐述了Java虚拟机在处理类、方法和代码时的设计和实现细节。同时书中大量的代码和指令细节能够让程序员更加直接地理解相关原理。
这是一本优秀的技术工具书,可以让阅读者更加深刻地理解虚拟机的原理和细节,值得每一位具有极客精神、追求细节的优秀程序员反复阅读和收藏。
——陌铭,菜鸟平台技术部架构师
本书是一本通过深入结合HotSpot源代码来解释Java虚拟机工作机理的书籍。概念是一切知识结构的基石。通过阅读本书,Java工程师可以了解和掌握Java虚拟机的核心概念,可以领会在工作中如何开发合理的、高效的Java应用,如何有效地解决、排查Java问题。
——李三红,阿里巴巴/蚂蚁金服JVM架构师
作为一名Java程序员,我们写过很多Java程序。但是,Java程序到底是如何运行的?如何写出更高效的Java代码……?这些问题不仅是初学者的困惑,也是很多老司机的短板。这些问题归根结底都要从JVM中去寻找答案,而国内能深入分析JVM的书并不多。亚飞撰写的本书不仅深入分析了Java虚拟机的运行机制与原理,而且在表达上非常通俗易懂,可以帮助读者深入理解并掌握Java语言的核心细节,在开发工作中以不变应万变,写出优秀高效的代码,值得细读。
——许令波(君山),《深入分析JavaWeb技术内幕(修订版)》作者
第1 章 Java 虚拟机概述 1
1.1 从机器语言到Java——詹爷,你好 1
1.2 兼容的选择:一场生产力的革命 6
1.3 中间语言翻译 10
1.3.1 从中间语言翻译到机器码 11
1.3.2 通过C 程序翻译 11
1.3.3 直接翻译为机器码 13
1.3.4 本地编译 16
1.4 神奇的指令 18
1.4.1 常见汇编指令 20
1.4.2 JVM 指令 21
1.5 本章总结 24
第2 章 Java 执行引擎工作原理:方法调用 25
2.1 方法调用 26
2.1.1 真实的机器调用 26
2.1.2 C 语言函数调用 41
2.2 JVM 的函数调用机制 47
2.3 函数指针 53
2.4 CallStub 函数指针定义 60
2.5 _call_stub_entry 例程 72
2.6 本章总结 114
第3 章 Java 数据结构与面向对象 115
3.1 从Java 算法到数据结构 116
3.2 数据类型简史 120
3.3 Java 数据结构之偶然性 127
3.4 Java 类型识别 130
3.4.1 class 字节码概述 131
3.4.2 魔数与JVM 内部的int 类型 134
3.4.3 常量池与JVM 内部对象模型 135
3.5 大端与小端 141
3.5.1 大端和小端的概念 144
3.5.2 大小端产生的本质原因 146
3.5.3 大小端验证 147
3.5.4 大端和小端产生的场景 149
3.5.5 如何解决字节序反转 152
3.5.6 大小端问题的避免 154
3.5.7 JVM 对字节码文件的大小端处理 154
3.6 本章总结 157
第4 章 Java 字节码实战 158
4.1 字节码格式初探 158
4.1.1 准备测试用例 159
4.1.2 使用javap 命令分析字节码文件 159
4.1.3 查看字节码二进制 162
4.2 魔数与版本 163
4.2.1 魔数 165
4.2.2 版本号 165
4.3 常量池 166
4.3.1 常量池的基本结构 166
4.3.2 JVM 所定义的11 种常量 167
4.3.3 常量池元素的复合结构 167
4.3.4 常量池的结束位置 169
4.3.5 常量池元素总数量 169
4.3.6 第一个常量池元素 170
4.3.7 第二个常量池元素 171
4.3.8 父类常量 171
4.3.9 变量型常量池元素 172
4.4 访问标识与继承信息 174
4.4.1 access_flags 174
4.4.2 this_class 175
4.4.3 super_class 176
4.4.4 interface 177
4.5 字段信息 177
4.5.1 fields_count 177
4.5.2 field_info fields[fields_count] 178
4.6 方法信息 182
4.6.1 methods_count 182
4.6.2 method_info methods[methods_count] 183
4.7 本章回顾 203
第5 章 常量池解析 204
5.1 常量池内存分配 206
5.1.1 常量池内存分配总体链路 207
5.1.2 内存分配 212
5.1.3 初始化内存 221
5.2 oop-klass 模型 222
5.2.1 两模型三维度 223
5.2.2 体系总览 224
5.2.3 oop 体系 226
5.2.4 klass 体系 229
5.2.5 handle 体系 232
5.2.6 oop、klass、handle 的相互转换 237
5.3 常量池klass 模型(1) 242
5.3.1 klassKlass 实例构建总链路 244
5.3.2 为klassOop 申请内存 248
5.3.3 klassOop 内存清零 251
5.3.4 初始化mark 251
5.3.5 初始化klassOop._metadata 256
5.3.6 初始化klass 257
5.3.7 自指 258
5.4 常量池klass 模型(2) 258
5.4.1 constantPoolKlass 模型构建 258
5.4.2 constantPoolOop 与klass 261
5.4.3 klassKlass 终结符 264
5.5 常量池解析 264
5.5.1 constantPoolOop 域初始化 264
5.5.2 初始化tag 266
5.5.3 解析常量池元素 267
5.6 本章总结 276
第6 章 类变量解析 277
6.1 类变量解析 278
6.2 偏移量 282
6.2.1 静态变量偏移量 282
6.2.2 非静态变量偏移量 284
6.2.3 Java 字段内存分配总结 309
6.3 从源码看字段继承 315
6.3.1 字段重排与补白 316
6.3.2 private 字段可被继承吗 322
6.3.3 使用HSDB 验证字段分配与继承 325
6.3.4 引用类型变量内存分配 333
6.4 本章总结 338
第7 章 Java 栈帧 340
7.1 entry_point 例程生成 341
7.2 局部变量表创建 349
7.2.1 constMethod 的内存布局 349
7.2.2 局部变量表空间计算 352
7.2.3 初始化局部变量区 355
7.3 堆栈与栈帧 364
7.3.1 栈帧是什么 364
7.3.2 硬件对堆栈的支持 383
7.3.3 栈帧开辟与回收 386
7.3.4 堆栈大小与多线程 388
7.4 JVM 的栈帧 392
7.4.1 JVM 栈帧与大小确定 392
7.4.2 栈帧创建 396
7.4.3 局部变量表 418
7.5 栈帧深度与slot 复用 430
7.6 最大操作数栈与操作栈复用 433
7.7 本章总结 436
第8 章 类方法解析 437
8.1 方法签名解析与校验 442
8.2 方法属性解析 444
8.2.1 code 属性解析 444
8.2.2 LVT&LVTT; 446
8.3 创建methodOop 452
8.4 Java 方法属性复制 456
8.5
8.6 查看运行时字节码指令 479
8.7 vtable 486
8.7.1 多态 486
8.7.2 C++中的多态与vtable 488
8.7.3 Java 中的多态实现机制 490
8.7.4 vtable 与invokevirtual 指令 497
8.7.5 HSDB 查看运行时vtable 499
8.7.6 miranda 方法 502
8.7.7 vtable 特点总结 505
8.7.8 vtable 机制逻辑验证 506
8.8 本章总结 508
第9 章 执行引擎 510
9.1 执行引擎概述 511
9.2 取指 513
9.2.1 指令长度 516
9.2.2 JVM 的两级取指机制 524
9.2.3 取指指令放在哪 529
9.2.4 程序计数器在哪里 531
9.3 译码 532
9.3.1 模板表 532
9.3.2 汇编器 538
9.3.3 汇编 546
9.4 栈顶缓存 555
9.5 栈式指令集 563
9.6 操作数栈在哪里 574
9.7 栈帧重叠 578
9.8 entry_point 例程机器指令 583
9.9 执行引擎实战 585
9.9.1 一个简单的例子 585
9.9.2 字节码运行过程分析 587
9.10 字节码指令实现 594
9.10.1 iconst_3 594
9.10.2 istore_0 596
9.10.3 iadd 597
9.11 本章总结 598
第10 章 类的生命周期 599
10.1 类的生命周期概述 599
10.2 类加载 602
10.2.1 类加载——镜像类与静态字段 609
10.2.2 Java 主类加载机制 614
10.2.3 类加载器的加载机制 620
10.2.4 反射加载机制 621
10.2.5 import 与new 指令 622
10.3 类的初始化 623
10.4 类加载器 626
10.4.1 类加载器的定义. 626
10.4.2 系统类加载器与扩展类加载器创建 632
10.4.3 双亲委派机制与破坏 634
10.4.4 预加载 636
10.4.5 引导类加载 638
10.4.6 加载、链接与延迟加载 639
10.4.7 父加载器 643
10.4.8 加载器与类型转换 646
10.5 类实例分配 647
10.5.1 栈上分配与逃逸分析 650
10.5.2 TLAB 654
10.5.3 指针碰撞与eden 区分配 655
10.5.4 清零 656
10.5.5 偏向锁 657
10.5.6 压栈与取指 658
10.6 本章总结 660
推荐序
从Java诞生至今已有二十余年,基于虚拟机的技术屏蔽了底层环境的差异,一次编译,随处运行的思想促进了整个IT上层技术应用产生了翻天覆地的变化。Java作为服务端应用语言的首选,确实降低了很多学习和应用门槛。现实生活中,绝大多数Java程序员对于虚拟机的原理和实现了解并不深入,也似乎并不那么关心。而随着互联网的极速发展,现在的Java服务端应用需要应对极高的并发访问和大量的数据交互,从机制和设计原理上了解虚拟机的核心原理和实现细节显然能够帮助Java程序员编写出更高效优质的代码。
虽然市面上从Java使用者角度介绍虚拟机的书也有不少佳作,但一般较为宽泛,尤其在谈及虚拟机如何运行、处理的细节时总有些浅尝辄止的遗憾。而作者凭借深厚的C与Java技术功底以及多年对于JVM的深入研究编写的这本书,真正从虚拟机指令执行处理层面,结合JVM规范的设计原理,完整和详尽地阐述了Java虚拟机在处理类、方法和代码时的设计和实现细节。书中大量的代码和指令细节能够让程序员更加直接地理解相关原理。
这是一本优秀的技术工具书,可以让阅读者更加深刻地理解虚拟机的原理和处理细节,值得每一位具有极客精神、追求细节的优秀程序员反复阅读和收藏。
菜鸟平台技术部陌铭
前言
文明需要创造,也需要传承。JVM作为一款虚拟机,本身便是技术之集大成者,里面包含方方面面的底层技术知识。抛开如今Java如日中天之态势不说,纯粹从技术层面看,JVM也值得广大技术爱好者深入研究。可以说,从最新的硬件特性,到最新的软件技术,只要技术被证明是成熟的,都会在JVM里面见到其踪影。JDK的每一次更新,从内部到核心类库,JVM都会及时引入这些最新的技术或者算法,这便是技术传承意义之所在。随着云计算、大数据、人工智能等最新技术的发展,Java技术生态圈也日益庞大,JVM与底层平台以及与其他编程语言和技术的交互、交织日益深入,这些都离不开对JVM内部机制的深入理解。如果说以前在中间件与框架领域的大展身手,依靠的是Java语言层面的特性和技术,那么以后越来越多的技术红利将会因JVM层面之创新而得以显现。
被真相所蒙蔽,是一件痛苦的事。我们在一个被层层封装的世界里进行开发和设计,操作系统、各种中间件与框架,将底层世界隐藏得结结实实。我们一方面享受着高级编程语言所带来的高效 揭秘Java虚拟机:JVM设计原理与实现 下载 mobi epub pdf txt 电子书 格式
揭秘Java虚拟机:JVM设计原理与实现 下载 mobi pdf epub txt 电子书 格式 2024
揭秘Java虚拟机:JVM设计原理与实现 下载 mobi epub pdf 电子书还没看,阿里大神写的。好好学习,希望明年能去阿里实习!
评分看了几页的 作者的语言比较生动 不错
评分烹羊宰牛且为乐,会须一饮三百杯。
评分这本书还是很不错的,东西挺好的,哈哈,不错的图书,哈哈,图书号哈哈
评分物流很快,质量也不错,看了20页,作者很幽默。
评分做活动用卷买的挺便宜的,用做资料书,提前预备着,书的内容不知道怎么样,还没看,看过之后再评论。
评分看起来不错。没时间仔细看,大概翻了下,觉得不错,后续有时间了好好看一下。
评分没看没看没看没看没看没看没看没看没看没看没看没看
评分严重怀疑是盗版的。昨天下单,今天到的。晚上下班兴致勃勃去取书,拆完快递后发现书已经被打开了,但是我也不在意,因为看着还是新的。但是当我翻开书进行阅读的时候,才刚开始读就发现内容出现跳章,一看直接从18页跳到35页,这个我就郁闷啦,请给个解释吧
揭秘Java虚拟机:JVM设计原理与实现 mobi epub pdf txt 电子书 格式下载 2024