![]()
内容推荐 不管技术如何发展,Java依然是一个充满活力的生态圈,学习Java的人也越来越多,但多数人学习Java虚拟机(JVM)时都会遇到瓶颈。本书将通过200余个示例详细介绍JVM中的各种参数配置、故障排查、性能监控及性能优化,帮助Java人突破瓶颈。 本书共11章,修订后版本涵盖Java 6~Java 10。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心——Class文件结构,以及Java虚拟机中类的装载系统。第11章介绍了Java虚拟机的执行系统和字节码,并给出了通过ASM框架进行字节码注入的案例。 本书不仅适合Java程序员阅读,还适合工作于Java虚拟机之上的研发人员、软件设计师、架构师阅读。 作者简介 葛一鸣,51CTO特约讲师,国家认证系统分析师,获得Oracle OCP认证。长期从事、Java软件开发工作,对Java程序设计、JVM有深入的研究,对设计模式、人工智能、神经网络、数据挖掘等技术有浓厚兴趣,著有《自己动手写神经网路》电子书,也开设了在线的《深入浅出Java虚拟机——入门篇》培训课程,有问题可联系作者个人博客www.uucode.net。 目录 第1章 初探Java虚拟机 1.1 知根知底:追溯Java的发展历程 1.1.1 那些依托Java虚拟机的语言大咖们 1.1.2 Java发展史上的里程碑 1.2 跨平台的真相:Java虚拟机做中介 1.2.1 理解Java虚拟机的原理 1.2.2 看清Java虚拟机的种类 1.3 一切看我的:Java语言规范 1.3.1 词法的定义 1.3.2 语法的定义 1.3.3 数据类型的定义 1.3.4 Java语言规范总结 1.4 一切听我的:Java虚拟机规范 1.5 数字编码就是计算机世界的水和电 1.5.1 整数在Java虚拟机中的表示 1.5.2 浮点数在Java虚拟机中的表示 1.6 抛砖引玉:编译和调试虚拟机 1.7 小结 第2章 认识Java虚拟机的基本结构 2.1 谋全局者才能成大器:看穿Java虚拟机的架构 2.2 小参数能解决大问题:学会设置Java虚拟机的参数 2.3 对象去哪儿:辨清Java堆 2.4 函数如何调用:出入Java栈 2.4.1 局部变量表 2.4.2 操作数栈 2.4.3 帧数据区 2.4.4 栈上分配 2.5 类去哪儿了:识别方法区 2.6 小结 第3章 常用Java虚拟机参数 3.1 一切运行都有迹可循:掌握跟踪调试参数 3.1.1 跟踪垃圾回收——读懂虚拟机日志 3.1.2 类加载/卸载的跟踪 3.1.3 查看系统参数 3.2 让性能飞起来:学习堆的配置参数 3.2.1 最大堆和初始堆的设置 3.2.2 新生代的配置 3.2.3 堆溢出处理 3.3 别让性能有缺口:了解非堆内存的参数配置 3.3.1 方法区配置 3.3.2 栈配置 3.3.3 直接内存配置 3.4 Client和Server二选一:虚拟机的工作模式 3.5 小结 第4章 垃圾回收的概念与算法 4.1 内存管理清洁工:认识垃圾回收 4.2 清洁工具大PK:讨论常用的垃圾回收算法 4.2.1 引用计数法(Reference Counting) 4.2.2 标记清除法(Mark-Sweep) 4.2.3 复制算法(Copying) 4.2.4 标记压缩法(Mark-Compact) 4.2.5 分代算法(Generational Collecting) 4.2.6 分区算法(Region) 4.3 谁才是真正的垃圾:判断可触及性 4.3.1 对象的复活 4.3.2 引用和可触及性的强度 4.3.3 软引用——可被回收的引用 4.3.4 弱引用——发现即回收 4.3.5 虚引用——对象回收跟踪 4.4 垃圾回收时的停顿现象:Stop-The-World案例实战 4.5 小结 第5章 垃圾收集器和内存分配 5.1 一心一意一件事:串行回收器 5.1.1 新生代串行回收器 5.1.2 老年代串行回收器 5.2 人多力量大:并行回收器 5.2.1 新生代ParNew回收器 5.2.2 新生代ParallelGC回收器 5.2.3 老年代ParallelOldGC回收器 5.3 一心多用都不落下:CMS回收器(JDK 8及之前的版本) 5.3.1 CMS主要工作步骤 5.3.2 CMS主要的参数 5.3.3 CMS的日志分析 5.3.4 有关Class的回收 5.4 未来我做主:G1回收器(JDK 9及之后版本的默认回收器) 5.4.1 G1的内存划分和主要收集过程 5.4.2 G1的新生代GC 5.4.3 G1的并发标记周期 5.4.4 混合回收 5.4.5 必要时的Full GC 5.4.6 G1的日志 5.4.7 G1相关的参数 5.5 回眸:有关对象内存分配和回收的一些细节问题 5.5.1 禁用System.gc() 5.5.2 System.gc()使用并发回收 5.5.3 并行GC前额外触发的新生代GC 5.5.4 对象何时进入老年代 5.5.5 在TLAB上分配对象 5.5.6 finalize()函数对垃圾回收的影响 5.6 温故又知新:常用的GC参数 5.7 动手才是真英雄:垃圾回收器对Tomcat性能影响的实验 5.7.1 配置实验环境 5.7.2 配置性能测试工具JMeter 5.7.3 配置Web应用服务器Tomcat 5.7.4 实战案例1——初试串行回收器 5.7.5 实战案例2——扩大堆以提升系统性能 5.7.6 实战案例3——调整初始堆大小 5.7.7 实战案例4——使用ParrellOldGC回收器 5.7.8 实战案例5——使用较小堆提高GC压力 5.7.9 实战案例6——测试ParallelOldGC的表现 5.7.10 实战案例7——测试ParNew回收器的表现 5.7.11 实战案例8——测试JDK 1.8 的表现 5.7.12 实战案例9——使用高版本虚拟机提升性能 5.8 小结 第6章 性能监控工具 6.1 有我更高效:Linux下的性能监控工具 6.1.1 显示系统整体资源使用情况——top命令 6.1.2 监控内存和CPU——vmstat命令 6.1.3 监控I/O——iostat命令 6.1.4 多功能诊断器——pidstat工具 6.2 用我更高效:Windows下的性能监控工具 6.2.1 任务管理器 6.2.2 perfmon性能监控工具 6.2.3 Process Explorer进程管理工具 6.2.4 pslist命令——Windows下也有命令行工具 6.3 外科手术刀:JDK性能监控工具 6.3.1 查看Java进程——jp |