CMS收集器的特点:追求最短的停顿时间。

CMS-Concurrent Mark Sweep 并发 标记 清除

标记垃圾的方式

标记清除:标记处需要回收的对象,标记完成后统一回收所有被标记的对象。

标记复制:将内存分为两块, 每次用一块。当一块内存用完时,将活着的对象复制到另一块上。

标记整理:让存活的对象整理到一端,清除掉死对象。

  • CMS平时用标记清除,碎片多了用标记整理。

CMS四个步骤

  1. 初始标记

在正常执行的时候如果要GC了,要找一个安全点停下来。安全点是对象引用关系不会发生变化的点。

初始标记会STW,业务代码都不会跑。初始标记会标记GC ROOTS。GC ROOTS是我们进行可达性分析时的找到的根节点,从根节点出发,他们引用的对象就是存活。

GC ROOTS:

  • 虚拟机栈引用的对象

  • NATIVE栈引用的对象

  • 类静态属性引用的对象

  • 常量引用的对象

  • synchronized锁引用的对象

  1. 并发标记

这个过程里用户线程和标记线程并发执行,这时用到三色标记法,三色是黑灰白,黑色表示对象已经被垃圾收集器访问过,且所有引用也被扫描过,他是安全存活的。灰色也被访问过,但是对象上至少存在一个引用没有被扫描过。白色表示没有被访问过。

但是因为用户线程在这个过程中可以改变对象的引用关系。

例如,在扫描2的引用时,2与3的引用断了,但是1又与3建立引用。

CMS的解决方法:将1再变为灰色节点。(增量更新)

G1的解决方法:虽然引用断了,但是把删除的引用记录下来,之后再按原来的快照扫描一次。(原始快照)

  1. 重新标记

重新标记过程2中变化了的引用关系,这时候STW。

  1. 并发清除

清理垃圾。

Reference

《深入理解JVM虚拟机》

CMSGC-GCRoots-三色标记的更多相关文章

  1. 【JVM调优】Day04:总结前三日内容(GC+算法*4+简单回收器*3三色标记,CMS+G1+ZGC,参数个数+OOM+调优参数)

  2. BZOJ1864[ZJOI2006]三色二叉树[树形DP]

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 773  Solved: 548[Submit][Status] ...

  3. 【BZOJ-1864】三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 659  Solved: 469[Submit][Status] ...

  4. 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...

  5. BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )

    难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...

  6. BZOJ_1864_[Zjoi2006]三色二叉树_树形DP

    BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...

  7. 三色抽卡游戏 博弈论nim

    你的对手太坏了!在每年的年度三色抽卡游戏锦标赛上,你的对手总是能打败你,他的秘诀是什么? 在每局三色抽卡游戏中,有n个卡组,每个卡组里所有卡片的颜色都相同,且颜色只会是红(R).绿(G).蓝(B)中的 ...

  8. 【iCore4 双核心板_ARM】例程一:ARM驱动三色LED

    实验原理: 通过STM32的三个GPIO驱动一个三色LED,引脚PB2接红色LED(ARM_LEDR), 引脚PA9接蓝色LED(ARM_LEDB),引脚PA10接绿色LED(ARM_LEDG),   ...

  9. 【iCore1S 双核心板_ARM】例程一:ARM驱动三色LED

    实验原理: 通过STM32的三个GPIO驱动一个三色LED,引脚PF3接蓝色LED(ARM_LEDB), 引脚PF4接绿色LED(ARM_LEDG),引脚PF5接红色LED(ARM_LEDR),  G ...

  10. bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...

随机推荐

  1. 复杂的光照与更复杂的阴影实现过程——ShaderCP9

    --20.8.28 这章的内容看了很久,也有很多复杂的内容.中途还有事情耽搁了一会.开学后就继续好好记录努力. 我们在游戏中能看到的让人觉得真实感的来源之一就是真实的光照以及光照所产生的阴影.下面的内 ...

  2. dos命令初学

    DOS命令 打开DOS命令方式 开始+系统+命令提示符 WIN键盘+R 输入CMD 打开控制台(推荐使用) 在任意文件夹下面,按住shift键加鼠标右键点击,在此处打开命令行窗口 自愿管理器的地址栏前 ...

  3. Unity中常用的几种读取本地文件方式

    使用的命名空间如下 using LitJson;using System.Collections.Generic;using System.IO;using System.Text;using Uni ...

  4. element select多选选项卡页面抖动问题

    最近做项目是有个功能需要下拉框多选,然后碰到了一个问题就是选择选项的时候出现频繁抖动的情况 问题描述: 页面选择到三个选项时长度为三的时候就会开始抖动,其他长度没有问题,检索elements是发现选择 ...

  5. CentOS7 yum方式安装mysql 5.7

    1.检查服务器上有没有安装mysqlyum安装方式:yum list installed mysql*yum卸载 yum remove 已安装的包卸载完安装包后,删除安装文件rm -rf /var/l ...

  6. Ubuntu与centos之间的文件传输

          Ubuntu与centos之间的文件传输 默认端口:22 传输前确认端口是否开启 1.在Ubuntu上安装scp命令 apt-get install openssh-server 2.将U ...

  7. CSS网页布局基础

    CSS网页布局基础1.行布局-基础的行布局-行布局自适应-行布局自适应限制最大宽-行布局垂直水平居中-行布局某部位自适应-行布局固定宽-行布局导航随屏幕滚动2.多列布局-两列布局固定-两列布局自适应- ...

  8. Docker 安装 MySQL5.7

    1.拉取数据库镜像 docker pull mysql:5.7 docker images命令查看镜像是否下载成功 docker images 2.配置mysql 创建mysql目录,用于存放mysq ...

  9. Sql Server代理作业、定时任务

    需求: 本次需求为每15分钟获取一次思路为,创建结果表,代理作业定时更新数据并存入结果表,后端只需要调用结果表数据数据,如果超期不同的天数则给出不同的提示信息,因为没有触发点,所以用到了本文内容. 右 ...

  10. mysql-开启日志记录功能

    开启日志记录功能 -- 开启功能 SET GLOBAL general_log = ON; -- 保存到文件 SET GLOBAL log_output = 'file'; 查看日志内容 -- 查看日 ...