自我提升
类型
可以朗读
语音朗读
153千字
字数
No.30
科学技术
2023-06-01
发行日期
展开全部
主编推荐语
剖析探索JVM核心底层原理,强化推动JVM优化落地。
内容简介
本书主要以Java虚拟机的基本特性及运行原理为中心,深入浅出地分析JVM的组成结构和底层实现,介绍了很多性能调优的方案和工具的使用方法。最后还扩展介绍了JMM内存模型的实现原理和Java编译器的优化机制,让读者不仅可以学习JVM的核心技术知识,还能夯实JVM调优及代码优化的技术功底。
目录
- 版权信息
- 内容提要
- 前言
- 第1章 Java语言的起源
- 1.1 Java发展的艰辛历程
- 1.2 Java散发的独特魅力
- 1.3 网络时代带来的挑战
- 1.3.1 什么是网络移动性
- 1.3.2 网络时代的软件模式
- 1.3.3 Java体系对网络移动性的支持
- 1.4 Java生态的体系结构
- 1.4.1 类装载系统
- 1.4.2 Class字节码文件
- 1.4.3 Java应用程序接口
- 1.4.4 认识Java虚拟机(JVM)
- 1.4.5 Java体系的得与失
- 1.5 JVM的进化发展史
- 1.5.1 虚拟机之祖:Sun Classic和Exact VM
- 1.5.2 HotSpot VM
- 1.5.3 移动端标准:Sun Mobile Embedded VM
- 1.5.4 诸子百家:BEA JRockit
- 1.5.5 百家争鸣:IBM J9
- 1.5.6 旷古烁今:Azul VM
- 1.5.7 其他鲜为人知的VM
- 1.6 小结
- 第2章 初次接触JVM
- 2.1 通过Oracle JDK搭建运行环境
- 2.1.1 Oracle JDK概述
- 2.1.2 安装环境的要求
- 2.1.3 下载和安装JDK
- 2.1.4 JDK版本和配置
- 2.1.5 JDK的组成部分
- 2.1.6 JVM和JDK的关系
- 2.2 通过Open JDK搭建运行环境
- 2.2.1 Open JDK的介绍
- 2.2.2 下载Open JDK源码包
- 2.2.3 Open JDK的版本介绍
- 2.2.4 运行环境的要求
- 2.2.5 构建编译属于自己的JDK
- 2.3 Open JDK和Oracle JDK的关系
- 2.3.1 Open JDK和Oracle JDK的联系
- 2.3.2 Open JDK和Oracle JDK的区别
- 2.4 小结
- 第3章 迈向JVM的第一步
- 3.1 JVM内部七大“核心”
- 3.1.1 类加载子系统
- 3.1.2 运行堆内存区域
- 3.1.3 方法区
- 3.1.4 虚拟机栈
- 3.1.5 本地方法栈
- 3.1.6 内存管理子系统
- 3.1.7 执行引擎子系统
- 3.2 JVM外部有利“辅助”
- 3.2.1 直接内存申请
- 3.2.2 编译执行与解释执行
- 3.2.3 运行进化及升华
- 3.3 JVM内部对象的探索发掘
- 3.3.1 对象的创建过程
- 3.3.2 对象的内存结构
- 3.3.3 对象的访问定位
- 3.4 JVM的OOM异常
- 3.4.1 运行时数据堆溢出
- 3.4.2 虚拟机栈和方法栈溢出
- 3.4.3 方法区的内存溢出
- 3.4.4 直接内存的溢出
- 3.5 JVM的总体内存结构分布
- 3.6 小结
- 第4章 开始认识类加载系统
- 4.1 类加载系统的整体生命周期和流程
- 4.1.1 加载阶段
- 4.1.2 验证阶段
- 4.1.3 准备阶段
- 4.1.4 解析阶段
- 4.1.5 初始化阶段
- 4.2 类加载系统为我们带来了什么
- 4.2.1 启动型Bootstrap类加载器
- 4.2.2 扩展型ExtClassLoader加载器
- 4.2.3 系统型AppClassLoader类加载器
- 4.2.4 自定义类加载器
- 4.2.5 双亲委托模型
- 4.2.6 非双亲委托模型
- 4.2.7 热加载程序的实现
- 4.2.8 加解密程序的实现
- 4.3 Class字节码的组成
- 4.3.1 基本结构
- 4.3.2 魔数头
- 4.3.3 版本号
- 4.3.4 常量池
- 4.3.5 访问标志
- 4.3.6 类元数据
- 4.3.7 接口元数据
- 4.3.8 字段元数据
- 4.3.9 方法元数据
- 4.3.10 属性元数据
- 4.4 小结
- 第5章 进入虚拟机核心世界
- 5.1 堆内存的“管辖范围”
- 5.1.1 如何申请堆内存
- 5.1.2 堆内存空间参数配置
- 5.1.3 堆内存空间结构分布
- 5.2 内存管理系统回收垃圾
- 5.2.1 垃圾回收器的分布
- 5.2.2 Serial
- 5.2.3 ParNew
- 5.2.4 Parallel Scavenge
- 5.2.5 Serial Old
- 5.2.6 Parallel Old
- 5.2.7 CMS
- 5.2.8 G1回收器
- 5.2.9 ZGC升级回收器
- 5.2.10 Shenandoah GC
- 5.3 垃圾回收的类型
- 5.3.1 Minor GC
- 5.3.2 Major GC
- 5.3.3 Mixed GC
- 5.4 方法区
- 5.4.1 静态常量池
- 5.4.2 字符串常量池
- 5.4.3 运行时常量池
- 5.4.4 不同版本的方法区
- 5.4.5 方法区对象的回收条件
- 5.5 执行引擎子系统
- 5.5.1 解释执行
- 5.5.2 编译执行
- 5.5.3 混合执行
- 5.6 对象描点标记的方法
- 5.6.1 引用计数器算法
- 5.6.2 可达性分析算法
- 5.6.3 引用的深入研究
- 5.7 GC垃圾回收算法
- 5.7.1 标记-复制算法
- 5.7.2 标记-清除算法
- 5.7.3 标记-整理算法
- 5.7.4 分代回收算法
- 5.8 小结
- 第6章 永远线程安全的区域
- 6.1 虚拟机栈和PC寄存器
- 6.1.1 虚拟机栈的介绍
- 6.1.2 局部变量表
- 6.1.3 操作数栈
- 6.1.4 动态链接
- 6.1.5 返回地址
- 6.1.6 PC寄存器
- 6.2 虚拟机执行机制介绍
- 6.2.1 初始化方法的场景
- 6.2.2 异常处理的场景
- 6.2.3 方法的调用分派
- 6.3 小结
- 第7章 虚拟机字节码指令集
- 7.1 字节码指令概述
- 7.1.1 字节码指令概述
- 7.1.2 指令的数据类型
- 7.1.3 加载和存储指令
- 7.1.4 运算指令
- 7.1.5 类型转换指令
- 7.1.6 对象创建和操作指令
- 7.1.7 操作数栈管理指令
- 7.1.8 控制转移指令
- 7.1.9 方法调用指令和返回指令
- 7.1.10 抛出异常指令
- 7.2 字节码指令执行案例分析
- 7.2.1 静态方法执行案例
- 7.2.2 实例方法执行案例
- 7.2.3 接口方法执行案例
- 7.2.4 动态方法执行案例
- 7.3 小结
- 第8章 JVM运作原理深入分析
- 8.1 内存分配及回收的依据
- 8.1.1 GCRoots的类型和识别
- 8.1.2 Safe Point
- 8.1.3 Safe Region
- 8.1.4 GC回收的二次过滤机制
- 8.2 内存分配及回收的策略
- 8.2.1 对象分配内存的规则
- 8.2.2 大对象直接迁入老年代
- 8.2.3 年龄达到阈值进入老年代
- 8.2.4 新生代担保分配机制
- 8.2.5 动态年龄分配机制
- 8.3 小结
- 第9章 JVM分析工具大全
- 9.1 JVM分析工具概述
- 9.1.1 jps
- 9.1.2 jstat
- 9.1.3 jstack
- 9.1.4 jmap
- 9.1.5 jinfo
- 9.1.6 jhat
- 9.2 常用JVM图形化分析工具概述
- 9.2.1 Jconsole
- 9.2.2 VisualVM
- 9.2.3 MAT
- 9.3 JVM在线性能分析服务
- 9.3.1 FastThread
- 9.3.2 GCEasy
- 9.3.3 PerfMa
- 9.4 小结
- 第10章 Arthas分析JVM问题定位
- 10.1 Arthas学习指南
- 10.1.1 Arthas的快速入门
- 10.1.2 Arthas的指令大全
- 10.1.3 Arthas的Http API
- 10.2 Arthas分析OOM问题定位
- 10.2.1 分析应用服务的内存泄漏
- 10.2.2 分析应用内存大对象问题
- 10.2.3 分析应用内存中不同引用对象
- 10.3 Arthas分析FullGC问题定位
- 10.3.1 推测分析问题之FullGC频率过高
- 10.3.2 推测分析问题之FullGC时间过长
- 10.4 Arthas分析线程方面问题定位
- 10.4.1 推测分析问题之线程死锁问题
- 10.4.2 推测分析问题之CPU负载过高
- 10.5 小结
- 第11章 程序的编译和代码优化
- 11.1 Java体系的3种编译器
- 11.2 JIT编译器
- 11.2.1 JIT编译器概述
- 11.2.2 JIT编译器特性
- 11.2.3 JIT编译器的原理
- 11.3 AOT编译器
- 11.3.1 AOT编译器概述
- 11.3.2 AOT编译器的特性
- 11.3.3 AOT编译器、JIT编译器与前端编译器的比较
- 11.4 编译技术的优化
- 11.4.1 消除公共子表达式
- 11.4.2 消除数组边界检查
- 11.4.3 方法内联机制
- 11.4.4 消除对象空值检查
- 11.4.5 基本块重排序
- 11.4.6 循环表达式外提
- 11.4.7 分支预测
- 11.4.8 常量传播机制
- 11.5 逃逸分析技术
- 11.5.1 逃逸分析概述
- 11.5.2 方法逃逸和线程逃逸
- 11.5.3 标量替换机制
- 11.5.4 同步消除机制
- 11.5.5 栈上分配机制
- 11.6 小结
- 第12章 Java内存模型和线程运作原理
- 12.1 Java内存模型
- 12.1.1 Java内存模型的介绍
- 12.1.2 主内存与工作内存的交互
- 12.1.3 Java内存模型的运行指令
- 12.1.4 MESI协议概述
- 12.1.5 volatile关键字实现
- 12.1.6 Happen-Before原则
- 12.1.7 As-If-Serial语义
- 12.2 线程实现
- 12.2.1 线程的实现原理
- 12.2.2 线程的调度机制
- 12.2.3 线程状态的转换
- 12.3 线程安全控制
- 12.3.1 原子性、可见性及有序性
- 12.3.2 线程安全的实现方案
- 12.4 线程的锁优化
- 12.4.1 自旋锁和适应性自旋锁
- 12.4.2 锁消除
- 12.4.3 锁粗化
- 12.4.4 轻量级锁
- 12.4.5 偏向锁
- 12.5 小结
展开全部
出版方
北京大学出版社
北京大学出版社是在1979年,经国家出版事业管理局同意,教育部批准成立的,恢复了北京大学出版社建制。北京大学出版社依靠北大雄厚的教学、科研力量,同时积极争取国内外专家学者的合作支持,出版了大量高水平、高质量、适应多层次需要的优秀高等教育教材。 北大出版社注意对教材进行全面追踪,捕捉信息,及时修订,以跟上各学科的最新发展,反映该学科研究的最新成果,保持北大版教材的领先地位。