JVM辣鸡收集器

垃圾收集器主要包括 Serial、ParNew、Parallel Scavenge、CMS、G1

Serial:单线程;简单而高效(与其他收集器的单线程相比);新生代采用复制算法,老年代采用标记-整理算法。进行垃圾收集工作的时候必须暂停其他所有的工作线程( “Stop The World” )。
在这里插入图片描述

ParNew:ParNew 收集器其实就是 Serial 收集器的多线程版本。
在这里插入图片描述
Parallel Scavenge:几乎和 ParNew 一样,关注点是吞吐量(高效率的利用 CPU,吞吐量是 CPU 中用于运行用户代码的时间与 CPU 总消耗时间的比值)。可设置 Parallel 收集器+ 老年代串行/老年代并行。

在这里插入图片描述

CMS:是一种以获取最短回收停顿时间为目标的并发收集器,实现了让垃圾收集线程与用户线程(基本上)同时工作。基于“标记-清除”算法。

CMS 运作分为 4 个步骤:

1.初始标记:暂停所有的其他线程,并记录下直接与 root 相连的对象,速度很快。

2.并发标记:同时开启 GC 和用户线程,记录可达对象,但并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新引用域,所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发生引用更新的地方。

3.重新标记:重新标记阶段修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,导致短暂停顿。

4.并发清除:开启用户线程,同时 GC 线程开始对为标记的区域做清扫。

在这里插入图片描述
CMS 主要优缺点:并发收集、低停顿;对 CPU 资源敏感、无法处理浮动垃圾、使用“标记-清除”算法会导致收集结束时会有大量空间碎片产生。

G1:G1 (Garbage-First) 主要针对配备多处理器及大容量内存的机器. 具备低停顿和高吞吐量特征。G1 从整体来看是基于“标记整理”算法实现的收集器,从局部上来看是基于“复制”算法实现的。

G1 在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的 Region(这也就是它的名字 Garbage-First 的由来)。

G1 主要有并行与并发、分代收集、空间整合、可预测的停顿的特点。运作大致分为初始标记、并发标记、最终标记、筛选回收这四个过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM (Java Virtual Machine) G1 (Garbage-First) 垃圾收集器是一种用于 Java 应用程序的垃圾收集算法。它是自JDK 7u4版本后引入的一种全新的垃圾收集器。 G1垃圾收集器的设计目标是为了解决传统的分代垃圾收集器可能遇到的一些问题,如停顿时间长、内存碎片化等。它采用了一种基于区域的垃圾收集方式,可以将内存划分为多个大小相等的区域,每个区域可以是Eden、Survivor或Old区。 G1垃圾收集器的工作原理如下: 1. 初始标记(Initial Mark):标记所有从根对象直接可达的对象。 2. 并发标记(Concurrent Mark):在并发执行程序的同时,标记那些在初始标记阶段无法访问到的对象。 3. 最终标记(Final Mark):为并发标记阶段中发生改变的对象进行最终标记。 4. 筛选回收(Live Data Counting and Evacuation):根据各个区域的回收价值来优先回收价值低的区域。 G1垃圾收集器具有以下特点: - 并发执行:在执行垃圾收集过程时,尽可能减少应用程序的停顿时间。 - 分区回收:将整个堆划分为多个区域,可以根据需要优先回收垃圾较多的区域,从而避免全堆回收带来的长时间停顿。 - 内存整理:G1垃圾收集器会对内存进行整理,减少内存碎片化,提高内存利用率。 需要注意的是,G1垃圾收集器并不适用于所有情况。在特定的场景下,如大堆情况下的长时间运行、对延迟要求非常高的应用等,可能需要考虑其他垃圾收集器的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值