• 揭秘Java虚拟机:JVM设计原理与实现
图书条目标准图
21年品牌 40万+商家 超1.5亿件商品

揭秘Java虚拟机:JVM设计原理与实现

25.67 2.0折 129 九五品

仅1件

河北廊坊
认证卖家担保交易快速发货售后保障

作者封亚飞 著

出版社电子工业出版社

出版时间2017-06

版次1

装帧平装

货号A2

上书时间2024-11-19

   商品详情   

品相描述:九五品
图书标准信息
  • 作者 封亚飞 著
  • 出版社 电子工业出版社
  • 出版时间 2017-06
  • 版次 1
  • ISBN 9787121315411
  • 定价 129.00元
  • 装帧 平装
  • 开本 16开
  • 纸张 胶版纸
  • 页数 700页
【内容简介】

  《揭秘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设计原理与实现》的过程中,将会在很多地方看到作者本人的这种思考。

 


【目录】

第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 < clinit> 与< init>   458

 

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

点击展开 点击收起

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP