JVM的CMS(concurrent mark sweep)四个阶段详细介绍

2023-11-02

1.initial mark(初始标记):通过GC roots找到根对象,这个过程会STW(stop the world),由于根对象并不多,所以STW的时间不会长。

2.concurrent mark(并发标记):这个过程其他工作线程也在改变引用的指向,即一边进行垃圾标记一边又改变这引用指向,可能又经历了垃圾变成非垃圾,非垃圾变成垃圾(这个过程是耗时最长的,所以并发去标记,不影响工作线程,缩短了SERAL单线程清理的STW时间,自然就提高了效率),所以还有第三阶段的重新标记。

3.remark(重新标记):因为并发标记的过程,产生的垃圾也不会太多,虽然也是会STW(STW的原因是在标记的时候如果又产生指向改变,那就又陷入了这个过程,所以STW暂时让指向不变保证完全标记),但是重新标记不会耗时太多,到这阶段,就完成了标记工作。

4.concurrent sweep(并发清理阶段:在并发清理的过程中其实工作线程也在工作,也会产生垃圾,这部分垃圾成为浮动垃圾,这些个垃圾在这次是不能清理了,只有等下一次垃圾清理。

备注:CMS细分是六阶段;被清理的这些垃圾包括,线程栈变量、静态变量、常量池、JNI指针

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM的CMS(concurrent mark sweep)四个阶段详细介绍 的相关文章

随机推荐

  • 高可用方案之脑裂问题探讨

    关于脑裂我们先来看看红帽的文档是如何解释的 What does split brain mean Split brain is a condition whereby two or more computers or groups of c
  • 【C 练习】分开打印一个数的每一位数字

    例 输入1234 输出1 2 3 4 我们可以通过下面这种方法得到每一位 int num 0 scanf d num while num gt 9 当数字大于9就不进入循环 直接在最后打印 printf d num 10 取到最后一位 nu
  • java测试数据库的连接,java怎么测试数据库连接数量

    import java sql public class DatabaseOrcale public DatabaseOrcale public static void main String args String OrcaleDrive
  • Object.defineProperty、Proxy、Reflect、vue2/vue3的响应式原理

    Object defineProperty const obj name 小黑 age 18 Object keys obj forEach key gt let value obj key Object defineProperty ob
  • vscode配置C++和Opencv(ubuntu18.04)

    安装opencv参考 Ubuntu18 04安装Opencv4 5 最新最详细 配置vscode参考 Ubuntu20 04 Ubuntu22 04 配置VScode Opencv cmake C Ubuntu环境下VScode配置Open
  • Java反射机制详解——框架的灵魂所在

    反射作为框架的核心 在Java中处于一个极为重要的地位 而且反射在Java中属于比较高级的技术 需要有对Java一定的理解才可以掌握好 反射可以在程序运行过程中修改程序的行为 但是与此同时反射也是极其危险的 需要谨慎使用 Class Cla
  • 【CTF】Crypto Writeup【思路已经告诉你了】

    题目 标题 思路已经告诉你了 THERE IS A WORD len WORD 4 md5 WORD key cf9c6242ecfbc924842c8a2095e44c5a SHA256 SHA256 WORD FLAG KEY SHA2
  • Android项目中运行main方法,进行测试,配置方法

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到教程 在高版本的Android Studio中 在Android项目中 直接运行main方法会报错 配置方法如下 1 找到 idea文件夹 2
  • idea中如何清除大量无用的废弃代码呢

    如何便捷的找到整个工程中废弃无用的私有方法 类以及变量呢 类似于 这样的 就说明该类没有任何地方引用 此时这样的类留在我们工程中 白白占用空间 拖慢启动速度 增大读代码的代价 如何轻松快速的把这些无用的代码一次抓出来呢 这里给出一种很简便的
  • DINO 论文笔记

    DINO DETR with Improved DeNoising Anchor Boxes for End to End Object Detection DINO通过使用对比方法 混合查询选择方法的anchor初始化的和盒子预测的loo
  • 【看后必会】一步步教你用React写一个markdown实时编辑器!

    1 实现效果 最近在用React写一个博客管理系统 有一个功能是添加新文章 在新建文章的页面 我希望做到像CSDN这样 左边是编辑区 markdown格式 右边是预览区 实时更新 编辑文本的同时 在预览区就能看到效果 就自己动手实现了一个这
  • 华为OD 机试3题(通过率60%,80%,75%)

    import java util List import java util Scanner import java util class Points int x int y public Points int x int y this
  • uni-app:刷新当前页面

    var pages getCurrentPages 获取所有页面的数组对象 var currPage pages pages length 1 当前页面 uni redirectTo url currPage page fullPath 执
  • [javascript] 深入理解js闭包

    闭包 closure 是Javascript语言的一个难点 也是它的特色 很多高级应用都要依靠闭包实现 一 变量的作用域 要理解闭包 首先必须理解Javascript特殊的变量作用域 变量的作用域无非就是两种 全局变量和局部变量 Javas
  • MULTI-CHANNEL SPEECH ENHANCEMENT USING GRAPH NEURAL NETWORKS 文献翻译

    MULTI CHANNEL SPEECH ENHANCEMENT USING GRAPH NEURAL NETWORKS 文献翻译 来自于脸书实验室的一篇文章 将图神经网络用在了多通道语音增强上面 思路比较新奇 下面可以通篇看一下翻译的中文
  • [整理]Linux配置开启SSH服务

    查看SSH是否已经安装 系统一般自带 rpm qa grep ssh 安装SSH yum install ssh 启动SSH service sshd start 停止SSH service sshd stop 重启SSH service
  • Windows下cmd命令,进入指定目录,创建查看目录

    Windows的cmd如何进入指定目录 1 进入指定盘 盘符 不区分大小写 只有盘符不区分 其下的一级到多级目录需要区分大小写 gt c gt d 2 进入D盘下的文件夹中 D盘下的一级目录可以使用下面三种进入 必须是在D gt 下键入 二
  • MFC下ADO连接MYSQL数据库

    一 ADO简介 MFC下最常见的两种连接数据库的方式就ODBC和ADO 而ADO是在OLEDB之上的高层数据库访问技术 其最大的优势就进行了封装 这样可以使我们在程序中控制对数据库的操作更加方便 而且当单独封装成类后 符合模块化的思想 二
  • 云服务器机型系统选择,云服务器机型选择操作系统

    云服务器机型选择操作系统 内容精选 换一换 按需购买的两台同类型弹性云服务器 操作系统类型相同 如Windows和Windows Linux和Linux 关机卸载系统盘后 重新挂载至对方弹性云服务器 实现系统盘互换 互换成功后 弹性云服务器
  • JVM的CMS(concurrent mark sweep)四个阶段详细介绍

    1 initial mark 初始标记 通过GC roots找到根对象 这个过程会STW stop the world 由于根对象并不多 所以STW的时间不会长 2 concurrent mark 并发标记 这个过程其他工作线程也在改变引用