IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java经典垃圾收集器 -> 正文阅读

[Java知识库]Java经典垃圾收集器

1.Serial收集器

Serial收集器是最基础,历史最久远的收集器,是一款新生代收集器,新生代收集采用的是“标记-复制算法”;它的工作方式是“单线程”。此处的单线程不仅是指它只会用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强调它在垃圾收集的时候,必须暂停其他所有工作的线程,包括用户线程,知道它收集结束。所以说,“Stop The World”(STW)可不是白叫的。

2.ParNew收集器

ParNew收集器实际上是Serial收集器的多线程并行版本,从名字就可以看出它也是一款新生代的收集器。

但是此处的多线程并行不是说它可以没有SWT,下面解释一下收集器并发和并行的概念:

  • 并行(Parallel): 并行描述的是多条垃圾收集器线程之间的关系,说明同一时间有多条这样的线程在协同工作,通常默认此时用户线程是处于等待状态。
  • 并发(Concurrent):并发描述的是垃圾收集器线程与用户线程之间的关系,说明同一时间垃圾收集器线程与用户线程都在运行。由于用户线程并未被冻结,所以程序仍然能响应服务请求,但由于垃圾收集器线程占用了一部分系统资源,此时应用程序的处理的吞吐量将受到一定影响。
  • —摘自《深入理解Java虚拟机》

3.Parallel Scavenge收集器

Parallel Scavenge收集器也是一款新生代的收集器,同样基于“标记-复制算法”实现,工作方式也是并行收集的多线程收集器。但它有一个最大特点是:尽量达到一个可控制的吞吐量。

比如完成一个任务,用户代码加上垃圾收集共花费了100秒,其中垃圾收集花费1秒,那吞吐量就是99%。

4.Serial Old收集器

Serial Old收集器是Serial收集器的老年代版本,同样的单线程,区别在于基于“标记-整理算法”实现。

5.Parallel Old收集器

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

6.CMS收集器

CMS(Concurrent Mark Sweep)收集器是一款基于“标记-清除算法”实现的,以获取最短回收停顿时间(缩短STW时间)为目标的收集器,它的运作更加复杂,整个过程分为以下四步:

(1)初始标记:标记以下GC Roots能直接关联到的对象,速度很快,需要"STW"

(2)并发标记:从GC Roots的直接关联对象开始遍历整个对象图,速度比较慢,但是不需要"STW"

(3)重新标记:标记那些刚刚并发标记期间,可能被用户重新抛弃的对象,速度比初始标记稍长,需要"STW"

(4)并发清除:清理被标记的已死亡的对象,由于不需要移动存活对象,所以可以并发执行,不需要"STW"

由于初始标记和重新标记的时间很短,因此CMS收集器可以理解为是内存回收的过程和用户线程一起并发执行的。

7.Garbage First收集器

Garbage First(简称G1)收集器是一款具有“停顿时间模型”的收集器,而实现这一模型的关键是基于Region的堆内存布局。这款收集器就像T1(faker)一样,很强,是当前介绍的几款里最强的

停顿时间模型的意思是能够支持指定在一个长度为M毫秒的时间内,消耗在垃圾收集上的时间大概率不超过N毫秒这样的目标。我们可以理解为:终于可以设置我想要的垃圾回收时间啦。

Region:将连续的Java堆划分为多个大小相等的独立区域,每一个区域都就是一个Region。它的不凡之处在于,每一个Region都可以根据需要扮演不同的角色:可以是Eden空间,可以是Survivor空间,也可以是老年代空间。值得一提的是Region中还有一类特殊的Humongous区域,专门用来存储大对象(占一个Region大小容量一半的对象),而G1收集器一般把该区域的对象当做老年代来处理。

在这里插入图片描述

G1收集器的运作过程分为以下四步:

1.初始标记:标记一下GC Roots能直接关联到的对象,需要短暂停顿,耗时很短。

2.并发标记:从GC Root 开始对堆中对象进行可达性分析,找到要回收的对象,耗时较长,但是和用户线程并发执行,没有"STW"。当对象图扫描完成后,还要重新处理刚刚并发时有引用变动的对象。

3.最终标记:对用户线程做另外一个短暂的暂停,用于处理并发阶段结束后仍然遗留下来的最后那少量的SATB记录。

4.筛选回收:先更新Region的统计数据,对各个Region的回收价值和成本进行排序,根据用户指定的时间(停顿时间模型在此处展现)来选择要回收的多个Region,将这些Region中存活的对象复制到空的Region中,再清理掉整个旧的Region的全部空间。这里涉及移动存活的对象,所以需要暂停用户线程,由多条收集器线程并行完成。

可见G1收集器除了并发标记以外,其他阶段都需要暂停用户线程,它并不是纯粹地追求低延迟,而是在延迟可控的情况下获得尽可能高的吞吐量,所以才担得起“全功能收集器”的重任和期望。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:42:36  更:2021-11-15 15:43:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:58:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码