垃圾回收器(一)
相关视频教程(来自动力节点):https://www.bilibili.com/video/BV1e64y197rh
相关资料下载:http://www.bjpowernode.com/?csdn
收集算法是内存回收的理论,而垃圾回收器是内存回收的实践。

说明:如果两个收集器之间存在连线说明他们之间可以搭配使用。
1. Serial收集器
这是一个单线程收集器。意味着它只会使用一个 CPU 或一条收集线程去完成收集工作,并且在进行垃圾回收时必须暂停其它所有的工作线程直到收集结束。

2. ParNew 收集器
可以认为是 Serial 收集器的多线程版本。

- 并行:Parallel,指多条垃圾收集线程并行工作,此时用户线程处于等待状态
- 并发:Concurrent,指用户线程和垃圾回收线程同时执行(不一定是并行,有可能是交叉执行),用户进程在运行,而垃圾回收线程在另一个 CPU 上运行。
3. Parallel Scavenge 收集器
这是一个新生代收集器,也是使用复制算法实现,同时也是并行的多线程收集器。
CMS 等收集器的关注点是尽可能地缩短垃圾收集时用户线程所停顿的时间,而 Parallel Scavenge 收集器的目的是达到一个可控制的吞吐量(Throughput = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间))。
作为一个吞吐量优先的收集器,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整停顿时间。这就是 GC 的自适应调整策略(GC Ergonomics)。
垃圾回收器(二)
1.Serial Old 收集器
收集器的老年代版本,单线程,使用 标记 —— 整理。

2. Parallel Old 收集器
Parallel Old 是 Parallel Scavenge 收集器的老年代版本。多线程,使用 标记 —— 整理

3. CMS 收集器
CMS (Concurrent Mark Sweep) 收集器是一种以获取最短回收停顿时间为目标的收集器。基于 标记 —— 清除 算法实现。
运作步骤:
- 初始标记(CMS initial mark):标记 GC Roots 能直接关联到的对象
- 并发标记(CMS concurrent mark):进行 GC Roots Tracing
- 重新标记(CMS remark):修正并发标记期间的变动部分
- 并发清除(CMS concurrent sweep)

缺点:对 CPU 资源敏感、无法收集浮动垃圾、标记 —— 清除 算法带来的空间碎片
4. G1 收集器
面向服务端的垃圾回收器。
优点:并行与并发、分代收集、空间整合、可预测停顿。
运作步骤:
- 初始标记(Initial Marking)
- 并发标记(Concurrent Marking)
- 最终标记(Final Marking)
- 筛选回收(Live Data Counting and Evacuation)

本文介绍了Java垃圾回收器的主要类型,包括Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld和CMS收集器。讲解了各收集器的特点,如Serial是单线程,ParNew是Serial的多线程版本,ParallelScavenge关注吞吐量,CMS追求最短停顿时间。此外,还讨论了CMS的运作步骤和优缺点。G1收集器作为面向服务端的垃圾回收器,具备并行、并发、空间整合和可预测停顿的特性。
492

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



