java复习垃圾收集器

1. Serial收集器

单线程工作的收集器,
Stop The World :它进行垃圾收集时, 必须暂停其他所有工作线程, 直到它收集结束
在这里插入图片描述

2. ParNew收集器

是Serial收集器的多线程版本

3. Parallel Scavenge 收集器

基于标记-复制算法实现的收集器 多线程 注重吞吐量 自适应调节

4. Serial Old 收集器

 Serial收集器的老年代版本, 
 它同样是一个单线程收集器, 
 使用标记-整理算法

在这里插入图片描述

5. Parallel Old 收集器

Parallel Scavenge收集器的老年代版本,
 支持多线程并发收集,
基于标记-整理算法实现。

在这里插入图片描述

6. CMS 收集器

并发收集、 低停顿
 一种以获取最短回收停顿时间为目标的收集器。
 基于标记-清除算法实现的, 
 运作过程分为四部分
 1 初始标记:仅仅只是标记一下GC Roots能直接关联的对象,速度很快,需要 Stop The World
 (GC Root有哪些呢 两栈两方法 虚拟机栈中的引用对象 本地方法栈中的引用对象 方法区中的静态属性引用对象 方法区中常量引用的对象)
 2 并发标记:从GC Roots的直接关联对象开始遍历整个对象图的过程, 这个过程耗时较长但是不需要停顿用户线程, 可以与垃圾收集线程一起并发运行; 
 3 重新标记:重新标记阶段则是为了修正并发标记期间, 因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,停顿的时间比初始标记长但是比并发标记短,需要Stop The World
 4 并发清除:清理删除掉标记阶段判断的已经死亡的对象, 由于不需要移动存活对象, 所以这个阶段也是可以与用户线程同时并发的。
 整个过程中耗时最长的并发标记和并发清除阶段中, 垃圾收集器线程都可以与用户线程一起工作, 所以从总体上来说, CMS收集器的内存回收过程是与用户线程一起并发执行的。 

在这里插入图片描述
缺陷:
1 CMS收集器对处理器资源非常敏感
2 无法处理浮动垃圾有可能出现“Con-current Mode Failure”失败进而导致另一次完全“Stop The World”的Full GC的产生。在CMS并发标记和并发清理阶段,户线程是还在继续运行的,会产生新的垃圾对象
3 收集结束时会有大量空间碎片产生。空间碎片过多时候对大对象分配带来了很多麻烦。

7. Garbage First 收集器

G1不再坚持固定大小以及固定数量的分代区域划分, 而是把连续的Java堆划分为多个大小相等的独立区域(Region) , 每一个Region都可以根据需要, 扮演新生代的Eden空间、Survivor空间, 或者老年代空间。 收集器能够对扮演不同角色的Region采用不同的策略去处理。
Region中还有一类特殊的Humongous区域, 专门用来存储大对象。G1认为只要大小超过了一个Region容量一半的对象即可判定为大对象。
新生代和老年代不再是固定的了, 它们都是一系列区域(不需要连续) 的动态集合
它将Region作为单次回收的最小单元, 即每次收集到的内存空间都是Region大小的整数倍,这样可以有计划地避免在整个Java堆中进行全区域的垃圾收集。
G1为每一个Region设计了两个名为TAMS(Top at Mark Start) 的指针,把Region中的一部分空间划分出来用于并发回收过程中的新对象分配, 并发回收时新分配的对象地址都必须要在这两个指针位置以上。 G1收集器默认在这个地址以上的对象是被隐式标记过的, 即默认它们是存活的, 不纳入回收范围。
如果内存回收的速度赶不上内存分配的速度, G1收集器也要被迫冻结用户线程执行, 导致Full GC而产生长时间“Stop The World”。
在这里插入图片描述
新生代垃圾回收:
Minor GC采用的是复制算法,把Eden区和Survivor区中还存活的对象复制到某个region区(空白的region区动态指定为Survivor区)
对于Eden区和Syrvivor区满足进入老年代的对象,复制到摸个region区(空白的region区动态指定为Tenured区)
可以存在多个E区S区和T区
老年代垃圾回收:
G1收集器的运作过程大致可划分为以下四个步骤:
1 初始标记:仅仅只是标记一下GC Roots能直接关联到的对象,并且修改TAMS指针的值,让下一阶段用户线程并发运行时, 能正确地在可用的Region中分配新对象。与CMS不同的是不需要STW,而且是借用进行Minor GC的时候同步完成的。
2 并发标记:GC Root开始对堆中对象进行可达性分析, 递归扫描整个堆里的对象图,找出要回收的对象, 还要重新处理SATB记录下的在并发时有引用变动的对象。
3 最终标记:用于处理并发阶段结束后仍遗留下来的最后那少量的SATB记录
4 筛选回收 :G1会挑选出在并发标记阶段计算出存活率低的region对象进行回收,负责更新Region的统计数据,对各个Region的回收价值和成本进行排序,把决定回收的那一部分Region的存活对象复制到空的Region中, 再清理掉整个旧Region的全部空间。 在这里插入图片描述
三色标记算法
提到并发标记,我们不得不了解并发标记的三色标记算法。它是描述追踪式回收器的一种有用的方法,利用它可以推演回收器的正确性。 首先,我们将对象分成三种类型的。
黑色:根对象,或者该对象与它的子对象都被扫描
灰色:对象本身被扫描,但还没扫描完该对象中的子对象
白色:未被扫描对象,扫描完成所有对象之后,最终为白色的为不可达对象,即垃圾对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值