阿里 P8 架构师爆肝分享内部开源的 JVM 垃圾回收 PDF 文档,共 23.3W 字
本文讲解的内容是关于垃圾回收(Garbage Collection,GC)的文档 ,为什么要写关于垃圾回收的文档呢?
首先,垃圾回收对应用影响很大,主要表现在应用停顿时间、吞吐量、资源使用等方面,开发者选择一种语言时考虑的一个重要因素就是该语言是否支持垃圾回收以及支持哪些垃圾回收实现(要综合考虑开发难度、效率和运行效率)。
其次,Hotspot 是最流行的 Java 虚拟机(Java Virtual Machine,JVM。本文使用 JVM 指代 Hotspot 虚拟机),垃圾回收是 Java 虚拟机最重要的组成部分,也是最复杂的部分之一。以 JDK 8 为例,共计支持 5 种垃圾回收实现,提供了超过 800 个可以调整的参数,其中与垃圾回收相关的参数超过 400 个。这么多参数给用户理解和使用垃圾回收算法带来了很大困难。
目前已经有众多书籍和文章介绍 JVM 中垃圾回收的相关知识,为什么还要再写与垃圾回收相关的文档呢?最主要的原因是笔者希望以实际产品为例,介绍垃圾回收的原理、实现以及使用,帮助读者解决 Java 工程师日常工作中遇到的常见问题。例如:
垃圾回收原理过于抽象,原理和实现存在不少差距。不同的虚拟机在实现一款垃圾回收算法时,由于应用场景不同,或者设计目标不同,最终会采用不同的实现方法,而不同的实现方法会给用户正确、合理地使用虚拟机造成影响。
垃圾回收调优过于依赖经验。根据资料或者文档,可以通过 JVM 参数调整解决一些问题,但是很少有资料系统化地介绍为什么调整参数能够解决问题,以及调整参数后引起的潜在问题是什么。
垃圾回收实现与硬件的关系。垃圾回收算法是通用算法,与具体硬件平台无关。但是 JVM 作为跨平台的实现,需要考虑如何利用不同硬件的特性,最大化地提高应用运行性能。最为典型的代表是部分硬件提供的弱内存顺序模型,需要虚拟机在正确性和性能之间取得平衡,而这也是虚拟机中垃圾回收实现的难点和重点。
限于文章篇幅原因,就展示到这里了,有需要的小伙伴 点击这里凭本文截图即可获取!
内容概览
本文涉及部分垃圾回收的理论知识,但更关注工程实践。
希望通过对实现的分析,让读者了解如何实现一款“令人满意”的垃圾回收器。“令人满意”通常是指满足业务诉求,并且综合考虑停顿时间、吞吐量、资源消耗、实现复杂度、稳定性等性能要求。
由于本文包含的细节内容实在是太多了,只把部分知识点截图出来粗略的介绍,共分为 4 大部分,四大部分里面又细分为 16 章的内容,16 章又分为若干小节:
第一部分介绍虚拟机执行的基础知识以及垃圾回收的相关知识。
第二部分介绍 JVM 中实现的 6 种垃圾回收算法。
第三部分介绍 JVM 提供的用于控制垃圾回收算法的参数。
第四部分以鲲鹏 920 为例介绍 ARM 服务器以及在 ARM 服务器下如何实现 GC 才能充分发挥硬件性能。
限于文章篇幅原因,就展示到这里了,有需要的小伙伴 点击这里凭本文截图即可获取!
评论