十种GC垃圾回收器

news/2024/11/30 1:38:30/

 

分代

serial和serial old

1.serial和serial old <!--jdK3,4的时候使用的--> 单线程执行,串行

serial(年轻代,copying)   :   单线程,需要gc时会停止工作线程,stw(stop-the-world) ,gc完之后在继续工作。
serial old(老年代  mark-sweep/mark-compact)  :  单线程,当需要gc的时候,需要停止工作线程,stw,gc之后继续工作
​
缺点:单线程,stw时间会很长,内存越大越不适用

parallel Scavenge 和 Parallel old (ps,po)

jdk1.8默认回收器。调优会可能从pspo-> cms,g1等等

ps:(年轻代,copying)  : 多个gc线程,当需要gc的时候,也需要stw,gc之后才能在继续工作
​
po(老年代,mark-compact)   : 多线程,当需要gc时, stw,gc后继续工作
​
缺点:gc stw,多线程资源开销

ParNew 和 CMS

ParNew (年轻代  coping): 多个gc线程,stw     和ps一样。 
​
CMS (老年代 mark-compact):大致会分为4个阶段。
​
初始标记。(工作线程还是会stw,在初始标记阶段只找到根上的对象,然后就恢复工作线程)
​
并发标记。 (工作线程和gc线程会共同进行,底层使用的三色标记法。CMS解决方案就是会根据内存写屏障将黑色对象变为灰色,继续跟踪下去标记。因为并发GC线程,所以就会又ABA问题(第一个线程标记完子关系会变成黑色,第二个线程扫描的时候可能因为对象又引用了别的子关系,会变成灰色,但是第一个线程标记完之前的关系后又变成了黑色))
​
重新标记。(所以cms的remark阶段就会从头扫描一遍。)
​
并发清理   然后进行清理垃圾
​
缺点:当CMS碎片话越来越严重的时候,CMS会使用SerialOld来清理老年代,也就是单线程并且stw.

 

不分代

g1

g1 (三色标记法,标记清理算法) 和CMS类似。对三色标记法的解决方案不一样,适合大内存。比如堆大于6-8G

G1解决方案:SATB   :灰色对象指定的标记消失的时候,会把这个引用标记推到GC的堆栈,保证GC扫描能再次扫描到,再次扫描只需要扫描那些region引用到该region。但是占空间,region种还有百分之20左右记录着谁引用的我。
缺点:空间占用资源大。

zgc

(jdk11 使用的颜色指针来判断该对象的状态,使用了读屏障)

每一个引用在64位机器上占用的都是64位,在ZGC使用引用的时候只用了其中的42位,来代表指向某个对象的真正地址,高18位没用,中间有4位代表指向的这个对象的状态
Zgc能管理4T的内存(2的42次方),最大能管理16T的内存(2的44次方)。

Shenandoah (jdk11)

使用了读屏障,转发指针

Epsilon

( 只做内存分配而不做内存回收(reclaim) )


http://www.ppmy.cn/news/257310.html

相关文章

中国厨房垃圾处理器(厨余粉碎机)行业深度调研与投资前景分析报告2022-2028年版

鸿晟信合研究院 中国厨房垃圾处理器&#xff08;厨余粉碎机&#xff09;行业深度调研与投资前景分析报告2022-2028年版 第1章&#xff1a;厨房垃圾处理器行业综述及数据来源说明1.1 厨房垃圾处理器行业界定 1.1.1 厨房垃圾处理器行业界定 1.1.2 厨房垃圾处理器行…

垃圾回收器分类

垃圾回收器大致分为四类&#xff1a;串行回收器、吞吐量优先回收器和响应时间优先回收器和G1回收器。 一 串行回收器 串行回收器&#xff1a;采用单线程进行垃圾回收&#xff0c;适合堆内存较小的场景。有Serial回收器和SerialOld回收器&#xff0c;Serial回收器采用复制算法对…

常见的垃圾回收器

一、参考文章 https://www.cnblogs.com/datiangou/p/10245874.html https://www.cnblogs.com/jason1990/archive/2019/10/24/11732261.html 二、常用垃圾回收器 1. JDK诞生 Serial追随 提高效率&#xff0c;诞生了PS&#xff0c;为了配合CMS&#xff0c;诞生了PN&#xff0c…

17. 垃圾回收器

垃圾回收器 GC分类与性能指标 垃圾收集器没有在规范中进行过多的规定&#xff0c;可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中&#xff0c;因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器&#xff0c;可以将GC分为不同…

三十五、垃圾回收器

一、GC分类于性能指标 垃圾回收器的分类 1.串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作&#xff0c;此时工作线程被暂停&#xff0c;直至垃圾收集工作结束。 1)在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合&#xff0c;串行回收器…

垃圾回收器算法

GC 垃圾回收概述 Java 和 C语言最大的区别&#xff0c;就在于&#xff0c;垃圾回收和内存动态分配上。C语言没有垃圾回收技术&#xff0c;需要程序员手动回收。1960年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题&#x…

GC垃圾回收器

分代收集器 新生代回收器 Serial&#xff1a;复制算法 | 单线程 | 适合内存不大的场景 ParNew&#xff1a;复制算法 | 多线程 | Serial收集器多线程版本 Parallel Scavenge&#xff1a;复制算法 | 多线程 | 类ParNew&#xff0c;更关注吞吐量 老年代回收器 Serial Old&#xf…

7种垃圾回收器介绍

可以作为GC Root对象&#xff1a; 1、栈中引用的对象 2、方法区中类静态属性引用的对象 3、方法区中常量引用的对象 4、本地方法栈中引用的对象&#xff08;一般是Native方法&#xff09; 先看图&#xff1a; 新生代收集器 Serial收集器 Serial收集器是采用复制算法的新生代…