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知识库 -> JVM垃圾收集器【Serial、ParNew、PS、CMS、Serial Old、PO、G1】总结 -> 正文阅读

[Java知识库]JVM垃圾收集器【Serial、ParNew、PS、CMS、Serial Old、PO、G1】总结

jdk版本<=9 包含上述垃圾收集器,根据分代理论基础可分为新生代+老年代。

G1的出现打破了以往分代理论的思考,通过化繁为简的方式实现低延迟。

新生代收集器

Serial

早期版本新生代垃圾收集器

特点

收集算法:标记-复制
线程协作:单线程
应用领域:客户端、内存有限

ParNew

继承Serial思路,拓展为并行处理

特点

收集算法:标记-复制
线程协作:多个GC线程并行处理
应用领域:主要结合CMS使用,低延迟

PS

继承ParNew,关注点为可控吞吐量【用户线程占据CPU时间/所有线程占据CPU总时间】

特点

收集算法:标记-复制
线程协作:多GC线程并行处理
更新点:通过添加参数-XX:+UseAdaptiveSizePolicy实现将内存管理寄托于虚拟机。实现自动管理内存。

老年代收集器

Serial Old

早期作为老年代收集器,同Serial配合使用,同时也可作为CMS分配对象失败时的后备收集器

特点

收集算法:标记-整理
线程协作:单线程处理

CMS

CMS的出现是第一次尝试追求低延迟,以及后面的G1都是在追求低延迟。可以说G1作为CMS的覆盖者。

特点

收集算法:标记-清除
收集流程:初始标记-并发标记-最终标记-并发回收,初始标记+最终标记需要暂停用户线程,确保一致性。
收集算法优点:快速
收集算法缺点:产生大量浮动垃圾,分配连续大对象时易产生full gc

PO

PO的产生是为了搭配PS,ps出现时只能跟Serial Old搭配,吞吐量在老年代不能搭配,故产生了PO

特点

收集算法:标记-整理
线程协作:并发处理

区域收集器【打破常规】

G1【Garbage First】

正如前文提到,G1也属于低延迟目标的实现者,创造它不仅是一种思维上的突破,更作为CMS的替换者,两者在处理流程上有很大的相似之处。

特点

回收算法:标记-整理
思维突破
不在区分新生代、老年代,而是将内存划分成一个个Region区域,区域大小在1-32MB【2的幂次方】之间,可理解为新生代、幸存区,当Region区域中对象内存大于一半时可将其认为是Humgongous Region【老年代】
收集流程
初始标记-并发标记-最终标记-筛选回收,除了并发标记,其余都是暂停用户线程,GC并发处理,归根结底跟回收算法有关。
如何实现低延迟
计算每个Region中回收效率,内部维护一个优先队列,每次回收指定时间内的Region。
缺点
内存占用相对较大,每个Region内部维护一个记忆集用来获取脏数据【GC标记之后,又失去存活条件】

低延迟收集器CMS、G1对比

				CMS									G1
关系:			先驱									后代
可达性分析:		增量更新								原始快照

可达性分析问题

并发对象扫描时对象消失问题,当下列两个条件同时发生
1、赋值器插入一条或多条从黑色对象到白色对象的新引用【增量更新破坏原理】
2、赋值器删除量全部从灰色对象到改白色对象的新引用【原始快照破话原理】

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:41:29  更:2022-02-06 13:43:33 
 
开发: 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 9:24:21-

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