- 「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」
算法分类及分代收集理论
- 一、垃圾回收算法主要化为为以下两大类:
- 引用计数式垃圾收集 (Reference Count GC)
- 追踪式垃圾收集 (Tracing GC)
- 二、3 个分代假说:
- 弱分代假说 (Weak Generational Hypothsis)
- 绝大多数对象是朝生夕灭的。
- 强分代假说 (Strong Generational Hypothsis)
- 熬过越多次垃圾收集过程的对象就越难消灭。
- 跨代引用假说 (Intergenerational Reference Hypothsis)
- 跨代引用相对同代引用较少。
- 三、部分收集 (Partial GC)指不是完整的垃圾收集,有以下 4 类:
- 新生代收集 (Minor GC):指新生代的垃圾收集。
- 老年代收集 (Major GC):指老年代的垃圾收集。
- 混合收集 (Mixed GC):收集全部新生代和部分老年代。
- 整堆收集 (Full GC):收集整个 java 堆和方法区。
垃圾收集算法
- 标记-清除算法 (Mark-Sweep)
- 该算法分为”标记“和”清除“两个阶段。首先标记出所要回收的对象,在标记完成之后就统一回收被标记的对象。但有执行效率不稳定和内存空间碎片化的缺点。
- 标记-复制算法 (Semispace Copying)
- 该算法将可用内存划分为两个大小相等的块,每次用一块,当一次用完时就将存活的对象复制到另一块上。解决了标记-清除算法执行效率低的缺点。
- 标记-整理算法 (Mark-Compact)
- 该算法结合了 标记-清除算法 和 标记-复制算法 ,标记过程和 标记-清除算法 一样,但后续步骤是将所有存活对象都向内存空间一端移动,然后直接清理边界以外的内存。
经典垃圾收集器
- Serial 收集器
- 它是一个单线程工作的收集器,但它不会只用一个处理器或一条线程工作,而是在进行垃圾收集时,必须停掉其他线程直至收集结束。
2. ParNew 收集器
- 它是 Serial 收集器的多线程并发版本。与 Serial 收集器几乎一致。
3. Parallel Scavenge 收集器
- 它与 ParNew 收集器 在诸多特征上相似,但是它的目标是用户线程的停顿时间达到一个可控制的吞吐量。
- Serial Old 收集器
- 它是 Serial 收集器 的老年代版本,是单线程收集器,使用 标记-整理算法 。
5. Parallel Old 收集器
- 它是 Parallel 收集器 的老年代版本,支持多线程并发收集,基于 标记-整理算法 。
6. CMS 收集器
- 它是一种获取最短停顿时间为目标的收集器。目前很大一部分应用在网站或浏览器的 B/S 系统的服务端上。它的收集步骤主要分为:①、初始标记 (CMS initial mark)。②、并发标记 (CMS concurrent mark)。③、重新标记 (CMS remark)。④、并发清除 (CMS concurrent sweep)。
7. Garbage First 收集器
- 它简称 G1 ,是垃圾收集器技术发展历史上的里程碑成果,开创了收集器面向局部收集的设计思路和基于 Region 的内存布局形式。同时 G1 是一款主要面向服务端应用的垃圾收集器。它的收集步骤主要分为:①、初始标记 (Initial Marking)。②、并发标记 (Concurrent Marking)。③、最终标记 (Final Marking)。④、筛选回收 (Live Data Counting and Evacuation)。
最后
- 这是这部分内容的第二篇,后面看情况再进行补充吧,先躺下肝不动了。第一篇在 这里 。