JVM&G1 GC实战来了!深入浅出的机制,深度把握JVM高级特性和最佳实践

前言

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架(如Spring、MyBatis等) 构成。在国内,有关Java类库API、Java语 言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虛拟机的资料却显得异常贫乏。

JVM是Java语言可以跨平台、保持高发展的根本,没有了JVM, Java 语言将失去运行环境。针对Java程序的性能优化一定不可能避免针对JVM的调优,随着JVM的不断发展,我们的应对措施也在不断地跟随、变化,内存的使用逐渐变得越来越复杂。所有高级语言都需要垃圾回收机制的保护,所以GC就是这么重要。

今天,小编就为大家带来两篇学习JVM&G1 GC以及JVM高级特性和最佳实践的秘籍,咱们来一探究竟吧~~~


深入理解JVM&G1 GC


内容简介

G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。

本篇主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,者就需要有综合能力的程序员。本书作者力求做到知识的综合传播,而不是仅仅针对Java虚拟机和GC调优进行讲解,也力求每一章节都有实际的案例支撑。

本书具体包括以下几方面:JVM基础知识、GC基础知识、G1 GC的深入介绍、G1 GC调优建议、JDK自带工具使用介绍等。

通读本篇后,读者可以深入了解G1 GC性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。


目录介绍

第一章:JVM&GC基础知识

  • 引言
  • Java相关术语
  • JVM/GC通用术语
  • G1涉及术语

通过本章我们应该理解:

  • 为什么我们需要了解JVM和GC,这是阅读本篇的依据。
  • 了解GC的基础常用术语知识,作者和读者需要对术语定义进行统一。
  • 了解JVM的基础知识,包括堆、栈、方法区等。
  • 为深入了解JVM和GC做好知识储备。

第二章:JVM&GC深入知识

  • Java虚拟机内存模型
  • 垃圾收集算法
  • Garbage Collection
  • 常见问题解析
  • 本章小结

本章主要介绍和解决以下问题

  • 了解JVM和内存相关的知识。
  • 了解常见的垃圾收集算法,这是GC实现的根本目标。
  • 了解GC的基本概念。
  • 了解各类GC的特性。
  • 为深入了解G1GC做好知识储备。

第三章:G1 GC应用示例

  • 范例程序
  • 选项解释及应用

本章主要介绍和解决以下问题,这些也是后续章节的实践部分。

  • 确定一个简单的代码程序作为示例。
  • 了解G1 GC自带的各种命令行选项。
  • 了解各个选项单独或混合使用后的运行输出
  • 对G1 GC输出日志进行一些解释。

第四章:深入G1 GC

  • G1 GC概念简述
  • G1 GC分代管理
  • G1 GC使用场景
  • G1 GC论文原文翻译(部分)

本章是全篇的概念层面核心章节,主要介绍和解决以下问题。

  • 深入学习G1 GC的各种基本概念。
  • 深入学习G1 GC的设计理念。
  • 深入了解G1 GC的各类特性。
  • 为第5章节针对G1GC的性能优化方案做知识准备。

第五章:G1 GC性能优化方案

  • G1的年轻代回收
  • 年轻代优化
  • 并行标记阶段优化
  • 混合回收阶段
  • 如何避免出现GC失败
  • 引用处理

本章主要介绍和解决以下问题,这些也是全篇的概念层面核心章节。

  • 对G1 GC各种概念进一步深入学习。
  • 深入运用G1 GC的特性。

第六章:JVM诊断工具使用介绍

  • SA基础介绍
  • SA工具使用实践
  • 其他工具介绍

本章主要介绍和解决以下问题,这些主要针对SA工具进行学习。

  • 什么是Serviceability Agent工具?
  • 了解相关概念、工具的基本功能及实践介绍。
  • 了解工具的扩展功能、插件介绍。
  • 对一些常见问题作出总结。

书签简介


JVM高级特性和最佳实践

内容概述

本篇一共分为五个部分:走近Java、 自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。

这里并没有假定所有读者都在Java领域具备特别专业的技术水平,因此会在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述虛拟机中与开发关系最为密切的内容。但是,本篇毕竟是在探讨虛拟机的工作原理,不可避免地需要读者有一定的技术基础,而且本篇的读者定位是中、高级程序员群体,对于一些常用的开发框架、Java类库API和Java语法等基础知识点,将假设读者已有所了解。

本篇介绍的Java虛拟机并不局限于某一个特定发行商或者某一款特定虚拟机,只是由于OracleJ DK/OpenJDK在市场占有率上的绝对优势,其中的HotSpot虛拟机不可避免地成为本书主要分析、讲解的对象,本篇在涉及Java虛拟机自身实现相关的内容时,大多将以HotSpot虛拟机为目标对象来进行讲解。但撰写本篇的意图并不是去做HotSpot的源码导读或者解析,本篇所讲述的内容多为Java虚拟机的通用原理,即使读者使用了HotSpot之外的其他Java虚拟机实现,也会有所收获。

目录预览

第一部分:走近Java

  • 走近Java
  • 概述
  • Java技术体系
  • Java发展史
  • Java虚拟机家族
  • 展望Java技术的未来
  • 实战:自己编译JDK

本篇的第一部分为后文的研究和讲解建立了良好的基础。虽然了解Java技术的来龙去脉,以及编译自己的OpenJDK对于读者理解Java虚拟机并不是必须的,但是这些准备过程可以为走近Java技术和Java虚拟机提供良好的引导。


第二部分:自动内存管理

  • Java内存区域与内存溢出异常
  • 垃圾收集器与内存分配策略
  • 虚拟机性能监控、故障处理工具
  • 调优案例分析与实战

这部分介绍了虚拟机中内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。介绍了垃圾收集的算法和HotSpot虚拟机中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虚拟机中自动内存分配及回收的主要规则。介绍了随JDK发布的基础命令行工具与可视化的故障处理工具的使用方法。


第三部分:虚拟机执行子系统

  • 类文件结构
  • 虚拟机类加载机制
  • 虚拟机字节码执行引擎
  • 类加载及执行子系统的案例与实战

这部分讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法, 以实战的方式演示了Class的数据是如何存储和访问的。介绍了类加载过程的“加载”“验证”“准备”“解析”和“初始化”五个阶段中虚拟机分别进行了 哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节码,以及执行代码时涉及的内存结构。通过几个类加载及执行子系统的案例,介绍了使用类加载器和处理字节码的一些值得欣赏 和借鉴的思路,并通过一个实战练习加深读者对前面理论知识的理解。


第四部分:程序编译与代码优化

  • 前端编译与优化
  • 后端编译与优化

这部分分析了Java语言中泛型、主动装箱拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析即时编译的数据和结果,还选择了几种常见的编译器优化技术进行讲解。


第五部分:高效并发

  • Java内存模型与线程

  • 线程安全与锁优化

这部分讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现;介绍了先行发生原则的规则及使用,以及线程在Java语言之中是如何实现的;还提前介绍了目前仍然在实验室状态的Java协程的相关内容。介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所做的一系列锁优化措施。


书签展示

后记

总的来说,本篇对Java JVM、GC机制的分析深入浅出,是对大数据Java内存回收的优秀实践。读完茅塞顿开、受益匪浅。很多技术细节应用之后,对产品性能有明显提升。

喜欢小编整理的这篇JVM&G1 GC和JVM高级特性的话,请多多点赞评论分享,让更多的的人获益。

想要获取文中完整PDF文档的朋友,请转发并关注小编后,私信回复【学习】就可以获得免费领取方式哦~~~

猜你喜欢

转载自blog.csdn.net/python6_quanzhan/article/details/106741083