美文网首页
垃圾收集器ParNew&三色标记法

垃圾收集器ParNew&三色标记法

作者: hangjun | 来源:发表于2021-10-26 23:48 被阅读0次

1. 垃圾收集算法

1.1 分代收集理论

1.2标记-复制算法:

概念
缺点:浪费空间

1.3.标记-清除算法:

概念:
缺点:
1效率问题(如果需要标记的对象太多,效率不高)
2.空间问题(标记清除后会产生大量不连续的碎片)

1.4标记-整理算法

概念:
缺点:
1.清理内存碎片需要时间

垃圾收集器

收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。
1.1Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)
1.2ParallelScavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代)
1.3ParNew收集器(-XX:+UseParNewGC))
ParNew收集器其实跟Parallel收集器很类似,区别主要在于它可以和CMS收集器配合使用。
新生代采用复制算法,老年代采用标记-整理算法。
1.4CMS收集器(-XX:+UseConcMarkSweepGC(old))
CMS(ConcurrentMarkSweep)
优点:
缺点:

收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体
验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,
它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。
从名字中的MarkSweep这两个词可以看出,CMS收集器是一种“标记-清除”算法实现的,它的运作过程相比于前面几种垃圾收集器来说更加复杂一些。

整个过程分为四个步骤:
初始标记:
暂停所有的其他线程(STW),并记录下gc,roots直接能引用的对象,速度很快。
并发标记:
并发标记阶段就是从GCRoots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。因为用户程序继续运行,可能会有导致已经标记过的对象状态发生改变。
重新标记:
并发清理:
并发重置:

核心参数配置:
1-XX:+UseConcMarkSweepGC:启用cms
2.-XX:ConcGCThreads:并发的GC线程数
3.-XX:+UseCMSCompactAtFullCollection:FullGC之后做压缩整理(减少碎片)
4.-XX:CMSFullGCsBeforeCompaction:多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一次
5.-XX:CMSInitiatingOccupancyFraction:当老年代使用达到该比例时会触发FullGC(默认是92,这是百分比)
6.-XX:+UseCMSInitiatingOccupancyOnly:只使用设定的回收阈值(-XX:CMSInitiatingOccupancyFraction设定的值),如果不指定,JVM仅在第一次使用设定值,后续则会自动调整
7.-XX:+CMSScavengeBeforeRemark:在CMSGC前启动一次minorgc,目的在于减少老年代对年轻代的引用,降低CMS GC的标记阶段时的开销,一般CMS的GC耗时80%都在标记阶段
8.-XX:+CMSParallellnitialMarkEnabled:表示在初始标记的时候多线程执行,缩短STW
9.-XX:+CMSParallelRemarkEnabled:在重新标记的时候多线程执行,缩短STW;

垃圾收集底层算法实现
三色标记:
黑:有引用
灰:存在引用,中间态状态
白:无引用

多标-浮动垃圾
漏标-读写屏障:有两种解决方案:增量更新(IncrementalUpdate)和原始快照(SnapshotAtTheBeginning,SATB)

增量更新:引用赋值給新对象的时候,记录下来这些引用。在重新标记扫描(重新标记会STW)
原始快照:引用被删除之后,记录下来这些引用,这些引用标记为黑色,代表有引用不能被删除,所以会导致浮动垃圾,下个gc会清理

写屏障:类似AOP的代码,跟内存屏障不一样

读屏障:

CMS:增量更新
G1:原始快照 SATB

相关文章

  • 垃圾收集器ParNew&三色标记法

    1. 垃圾收集算法 1.1 分代收集理论 1.2标记-复制算法: 概念缺点:浪费空间 1.3.标记-清除算法: 概...

  • 三色标记法与读写屏障

    前言 本文主要介绍了三色标记法的基本思路、多标导致的浮动垃圾、漏标的处理方案(读写屏障)等。 1. 垃圾回收的简单...

  • JVM垃圾收集器

    七大垃圾收集器 GC算法(可达性分析,复制,标清,标整)是内存回收的方法论,垃圾收集器就是这些方法论的落地实现: ...

  • JVM学习12·垃圾回收器以及HotSpot的实现细节

    1.并发标记与三色标记 在三色标记法之前有一个算法叫Mark-And-Sweep(标记清除)。这个算法会设置一个标...

  • CMS,G1 垃圾回收器中的三色标记了解吗?

    三色标记算法思想 三色标记法是一种垃圾回收法,它可以让 JVM 不发生或仅短时间发生 STW(Stop The W...

  • 垃圾收集器

    简介  垃圾收集器是垃圾收集算法的具体实现,各种垃圾收集器没有好坏之分,适合自己当前应用的垃圾收集器才是最好的垃圾...

  • JVM学习笔记之垃圾收集器【五】

    垃圾收集器 HotSpot 包含的垃圾收集器 一、串行收集器 1.1、Serial 收集器 在 JDk1.3 之前...

  • Go面试题

    1、简述 Go 语言GC(垃圾回收)的工作原理 Go1.3采用标记清除法, Go1.5采用三色标记法,Go1.8采...

  • HotSpot垃圾收集器

    HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器 ...

  • 5种JVM垃圾收集器特点和8种JVM内存溢出原因

    先来看看5种JVM垃圾收集器特点 一、常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Seria...

网友评论

      本文标题:垃圾收集器ParNew&三色标记法

      本文链接:https://www.haomeiwen.com/subject/amcualtx.html