文章目录
一、学习路线

- 建立知识体系: 从 JVM 的内存结构到垃圾收集的算法和收集器,学习 GC 的基础知识,掌握一些常用的 GC 问题分析工具。
- 确定评价指标: 了解基本 GC 的评价方法,摸清如何设定独立系统的指标,以及在业务场景中判断 GC 是否存在问题的手段。
- 场景调优实践: 运用掌握的知识和系统评价指标,分析与解决九种 CMS 中常见 GC 问题场景。
- 总结优化经验: 对整体过程做总结并提出笔者的几点建议,同时将总结到的经验完善到知识体系之中。
二、GC基础
2.1 基础概念
- GC: GC 本身有三种语义,下文需要根据具体场景带入不同的语义:
- Garbage Collection:垃圾收集技术,名词。
- Garbage Collector:垃圾收集器,名词。
- Garbage Collecting:垃圾收集动作,动词。
- Mutator: 生产垃圾的角色,也就是我们的应用程序,垃圾制造者,通过 Allocator 进行 allocate 和 free。
- TLAB: Thread Local Allocation Buffer 的简写,基于 CAS 的独享线程(Mutator Threads)可以优先将对象分配在 Eden 中的一块内存,因为是 Java 线程独享的内存区没有锁竞争,所以分配速度更快,每个 TLAB 都是一个线程独享的。
- Card Table: 中文翻译为卡表,主要是用来标记卡页的状态,每个卡表项对应一个卡页。当卡页中一个对象引用有写操作时,写屏障将会标记对象所在的卡表状态改为 dirty,卡表的本质是用来解决跨代引用的问题。具体怎么解决的可以参考 StackOverflow 上的这个问题 how-actually-card-table-and-writer-barrier-works,或者研读一下 cardTableRS.app 中的源码。

本文详细介绍了JVM的GC基础,包括GC的三种语义、JVM内存划分、对象分配、垃圾识别与收集算法。重点讨论了JDK 1.8的内存结构,以及ParNew、CMS、G1等收集器的工作原理和应用场景,旨在帮助读者建立完整的GC知识体系和调优实践。

226

被折叠的 条评论
为什么被折叠?



