一、CMS及其三色标记算法

1、核心

标记整个图谱的过程分为多步

多个线程相互工作,才能标记完

标记的算法,JVM虚拟机、go语言使用的都是三色标记算法

2、含义

从那个地方开始,用三种颜色替代

一开始,所有对象都是白色-表示从来没有接触过的对象

已经接触过,但未标记其孩子的对象,是灰色对象

找到了该对象以及所有的孩子,是黑色对象

三色是怎么进行标识的:

(1)颜色表10 00 01分别表示颜色

(2)实际:在对象头部的mark word拿出两位来进行标识

3、白色-灰色-黑色的过程

下次开始的时候,线程只需要从灰色开始即可

4、发生的情形

业务线程和垃圾回收线程共同工作的时候

垃圾回收线程找,A找到,待回收,其孩子B找到,但B的孩子D还未找到

此时业务线程继续,被回收的A关联到B的孩子D,而B的引用被标记为空,B标记为黑

此时,D实际上有引用,但被清除了(B到D的引用删除,以为垃圾回收已经结束了)

5、如何修正

需要加屏障

JVM当发现黑色对象的引用指向白色时,进行一些操作--例如将A变成灰色,下次会继续从A开始找【CMS采取的方案】

CMS采取的方法叫:Incremental Update

6、CMS的解决方案存在的bug

并发标记,容易产生漏标

7、CMS怎么修正该bug--remark再标一遍

实际上,其STW的时间仍然很长

8、调优

CMS的调优比较复杂,有几十个参数,都需要掌握

9、建议

原来是:PS PO

内存足够大(1G),可以最直接换成G1

二、G1

1、算法

仍然基于三色标记算法

但未标记的孩子,不会标记为灰色

2、解决方案:SATB Snapshot At the Begining

B-D的引用消失,把引用记下来(白色指向的D)

对被引用对象D进行单独处理(看有没有黑色的引用指过来,如果有,就不将其标记为黑色)

引用指向的都是白对象,如果没有引用,就标记为黑色对象,否则就被标记为白色对象

3、存在问题

找有没有引用指向D

怎么着指向D的对象-扫描?

4、G1的分区模型-从G1开始,都是分区模型

分区后,意味着,当某个分区满了,只回收当前分区,没有必要回收其他分区

回收该分区时,有用的想会移动到其他游泳而位置

可以实现一边分区,其他线程一边运行

5、如何寻找指向当前对象的引用

在G1中,有一个remember set,记录着有多少对象指向当前分区

记忆集中寻找

大概率,白色对象不会变为黑色

6、与其他垃圾回收器的比较

按照停顿时间STW,PS寻找2-3天

建议不要使用CMS,而是使用G1

没有一个默认的jdk版本,是CMS的方式

三、ZGC-Zero pause GC

1、概念

号称0毫秒,如果能达到,就和C/C++没有区别了

采用的方案是颜色指针:color pointer

ZGC关注的是地址本身,而不是实际存储

2、结构

2的42次方内存

现在是44次方,约4T

3、GC的过程

从各个区内,区内都是remapped

从根开始找

标记位标记指针的状态,初始标记为M0

有M0就是有用的,没有 M0,是remapped就是垃圾

线程访问M0时,对应对象的标记就会换成M0

【JVM调优】Day02:CMS的三色标记算法、分区的G1回收器、短时停顿的ZGC回收器的更多相关文章

  1. 一文带你弄懂 JVM 三色标记算法!

    大家好,我是树哥. 最近和一个朋友聊天,他问了我 JVM 的三色标记算法.我脑袋一愣发现竟然完全不知道!于是我带着疑问去网上看了几天的资料,终于搞清楚啥事三色标记算法,它是用来干嘛的,以及它和 CMS ...

  2. G1混合式GC与三色标记算法详解【纯理论】

    继续基于上一次https://www.cnblogs.com/webor2006/p/11146273.html的理论进一步了解G1. G1收集概览: G1算法将堆划分为若干个区域(Region),它 ...

  3. JVM调优——之CMS GC日志分析

    最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重 ...

  4. JVM调优——之CMS 常见参数解析

    最近在学习使用CMS这个GC,这里记录下常用的参数. 1. UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 有一点需要注意的是:C ...

  5. JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

    谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解了前面的前置知识,有利于对垃圾回收器的理解. 什么是垃圾? 垃圾,主要是指堆上的对象, ...

  6. JVM调优参数、方法、工具以及案例总结

    这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...

  7. GC 卡顿 优化 三色标记优势

    小结: 1. 三色标记的一个明显好处是能够让用户程序和 mark 并发的进行 Go GC 卡顿由秒级降到毫秒级以下:到底做了哪些优化? https://mp.weixin.qq.com/s/2BMGG ...

  8. 三色标记法与读写屏障, G1工作过程

    https://www.jianshu.com/p/12544c0ad5c1 https://www.cnblogs.com/GrimMjx/p/12234564.html 自我总结和记忆: 为了解决 ...

  9. JVM调优总结(三)——分代垃圾回收详述

    为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...

  10. JVM调优(三)——基于Btrace的监控调试

    JVM调优(三)--基于Btrace的监控调试 简介 Btrace可以动态地向目标应用程序的字节码注入追踪代码 用到的技术: JavaComplierApi.JVMTI.Agent.Instrumen ...

随机推荐

  1. kubectl top命令

    kubectl top命令可显⽰节点和Pod对象的资源使⽤信息,它依赖于集群中的资源指标API来收集各项指标数据.它包含有node和pod两个⼦命令,可分别⽤于显⽰Node对象和Pod对象的相关资源占 ...

  2. Logstash:Logstash-to-Logstash 通信

    文章转载自:https://elasticstack.blog.csdn.net/article/details/117253545 在有些时候,我们甚至可以建立 Logstash-to-Logsta ...

  3. MongoDB一主一副本一仲裁搭建步骤

    mkdir -p /opt/mongo/replica_sets/myrs_27017/log & mkdir -p /opt/mongo/replica_sets/myrs_27017/da ...

  4. 在CentOS 8服务器上搭建FastDFS环境

    什么是FastDFS? 这里,我就摘录下百度百科上对于FastDFS的描述. FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下 ...

  5. Java19虚拟线程都来了,我正在写的线程代码会被淘汰掉吗?

    Java19中引入了虚拟线程,虽然默认是关闭的,但是可以以Preview模式启用,这绝对是一个重大的更新,今天Java架构杂谈带大家开箱验货,看看这家伙实现了什么了不起的功能. 1 为什么需要虚拟线程 ...

  6. SpringBoot-JavaMailSender接口实战

    相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送,在Spring Boot的Starter模块中也为此提供了自动化配置. 下面通过实例来 ...

  7. Pep9课下作业

    (1)编写一个伪代码算法 Set sum to 0 Input num1 Read num1 Set sum to sum + num1 Input num2 Read num2 Set sum to ...

  8. Period of an Infinite Binary Expansion 题解

    Solution 简单写一下思考过程,比较水的数论题 第一个答案几乎已经是可以背下来的,在此不再赘述 考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \per ...

  9. 图解不同版本的HTTP协议

    前言 大家好,我是蜗牛,今天我们聊聊HTTP协议,通过这篇文章我们能了解到不同版本HTTP优缺点.他们之间的性能差异以及现在主流的HTTP协议用的那个版本 HTTP/1.1 时代 HTTP/1.1 对 ...

  10. eDP接口简介

    1. eDP背景介绍   随着显示分辨率的越来越高,传统的VGA.DVI等接口逐渐不能满足人们的视觉需求. 随后就产生了以HDMI.DisplayPort为代表的新型数字接口,外部接口方面HDMI占据 ...