当前位置: 首页 > news >正文

JVM-GC-CMS垃圾回收器

JVM-CMS垃圾回收器

CMS垃圾回收的步骤

1. 初始标记(InitialMarking)
  1. 这是一个STW的过程,并行标记,只是标记GC Roots能直接关联到的对象。
  2. 由于GC Root直接关联的对象少,因此STW时间比较短。
2. 并发标记
  1. 非STW的过程,并发标记,业务线程和GC线程同时运行,由CPU进行调度。这里标记的算法是三色标记算法
  2. 由于并发标记,在标记过程中会导致对象之间的引用发生变化,采用增量更新方法解决这个问题
3. 重新标记
  1. STW的过程,重新标记在并发标记过程中引用发生了变化或者新产生的对象。主要包括:
  2. 年轻代对象晋升到老年代,可能产生新的存活对象;
  3. 大对象直接被分配到老年代,可能产生新的存活对象;
  4. 老年代和年轻代对象的引用关系发生变化
4. 并发清除
  1. 最后,GC线程会清除不再被引用的对象,并回收他们占用的内存空间
  2. 非STW,由于前面的标记阶段已经将还在使用的对象标记了出来
  3. 在此过程中新产生的垃圾只能等待下次GC

CMS特点与问题

  1. Concurrent mark sweep并发标记清除,在CMS之前都是STW的。
  2. 浮动垃圾问题
  3. CPU要求高:CMS默认启动的回收线程数为(CPU数量+3)/4,当CPU不足4个时候,效率低
  4. 标记清除算法导致内存碎片化严重

小结:CMS从提出概念到实际完成用了10年多的时间,在此之前没有过并发回收的垃圾回收器,因此它是一个垃圾回收器的里程碑,后来的G1也是基于CMS做的一些改进。由于CMS是并发清除的新时代,它也存留了很多问题,JDK任何版本都不会使用CMS作为默认垃圾回收器。

三色标记算法

  1. 它是一个标记算法,不负责清除。
  2. 从root开始遍历链表,并用白、灰、黑三种颜色来标记对象的状态。
  3. 没有被标记过的为白色;被标记过但是没有遍历完其子节点的标记为灰色;对象本身及其子节点都被遍历过的标记为黑色。
  4. 多标问题:在标记完成后对象引用断开,被引用对象变为垃圾对象,但是已经被标记过了,产生浮动垃圾,这个问题并不大,等待下次GC即可
  5. 漏标问题:至少有一个黑色对象新增了对白色对象的引用,所有灰色对象指向该白色对象的引用都断开了,这个问题比较严重,CMS使用增量更新的方法解决。

CMS如何解决漏标问题

incremental update:增量更新,关注引用的增加,如果要给黑色对象引用增加,将黑色对象标记为灰色

相关文章:

JVM-GC-CMS垃圾回收器

JVM-CMS垃圾回收器 CMS垃圾回收的步骤 1. 初始标记(InitialMarking) 这是一个STW的过程,并行标记,只是标记GC Roots能直接关联到的对象。由于GC Root直接关联的对象少,因此STW时间比较短。 2. 并发标记 非STW的过程&…...

【玩转google云】实战:如何在GKE上使用Helm安装和配置3节点的RabbitMQ集群

需求 因项目需要需要在Google Kubernetes Engine (GKE) 中使用Helm安装一个3节点的RabbitMQ集群,配置用户名和密码,开通公网访问的Web管理界面,指定namespace为mq,并使用5G的硬盘存储MQ的数据。 前提条件 GKE集群:确保你有一个运行中的GKE集群。Helm工具:确保已安装Hel…...

【神经网络】深度神经网络

深度神经网络(Deep Neural Network,简称DNN)是一种模仿人脑神经网络结构和工作原理的机器学习模型。它通过层级化的特征学习和权重调节,能够实现复杂任务的高性能解决方案。深度神经网络由多个神经元层组成,每个神经元…...

机器学习算法 —— K近邻(KNN分类)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 KNN的介绍和应用KNN的介绍1) KNN建立过程2) 类别的判定KNN的优点KNN的缺点KNN的应用实战KNN分类数据集 —— KNN分类库函数导入数据导入模型训练&可视化原理简析莺尾花数据集 —— KNN分…...

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP,适合做猫狗宠物类的发信息发布,当然懂的修改一下,做其他信息发布也是可以的。 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码...

c++ 智能指针使用注意事项及解决方案

c11智能指针 shared_ptr介绍注意事项示例解决方案 weak_ptr特点示例 unique_ptr特点示例 shared_ptr 介绍 shared_ptr 是一种智能指针,用于自动管理动态分配的对象的生命周期。它通过引用计数机制来确保当最后一个 shared_ptr 指向一个对象时,该对象会…...

SQLite Delete 语句

SQLite Delete 语句 SQLite 的 DELETE 语句用于从表中删除数据。它是 SQL 数据库管理中非常基础且重要的操作之一。在使用 DELETE 语句时,可以删除表中的特定行,也可以删除整个表的数据。本文将详细介绍 SQLite 中的 DELETE 语句,包括其语法、用法以及如何安全地执行删除操…...

vue3的基本使用方法

【 vue3实例 】 【 0 】对象、方法和属性 对象(Object): 对象是编程中的一个数据结构,它可以包含多种数据类型,包括数字、字符串、布尔值、数组、其他对象等。对象通常由一系列属性和方法组成。在面向对象编程&…...

Java数据结构与算法(盛水的容器贪心算法)

前言 . - 力扣(LeetCode) 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优或最佳的选择,以期望通过一系列的局部最优选择达到全局最优解的算法。贪心算法的核心思想是贪心选择性质和最优子结构性质。 贪心算法的基本步骤 建立模型:将问题分解为一…...

MYSQL 数字(Aggregate)函数

目录 1、AVG() 2、MAX() 3、MIN() 4、SUM() 5、COUNT() 6、LIMIT() 1、AVG() 解释:返回数值列(字段)的平均值。 语法格式:SELECT AVG(column_name) FROM table_name 中文注释:select AVG(数值列/字段) from 表名 ; 用法&#xff1…...

【TensorFlow深度学习】如何处理不平衡数据集与欠采样、过采样技术

如何处理不平衡数据集与欠采样、过采样技术 如何处理不平衡数据集与欠采样、过采样技术:实现均衡学习的艺术1. 不平衡数据集的识别与评估2. 欠采样技术:减少多数类样本3. 过采样技术:增加少数类样本4. 集成采样策略:SMOTE +ENN 或 SMOTE +Tomek Links5. 评估与选择最佳策略…...

【考研数学】如何保证进度不掉队?暑假强化保姆级规划

数一125学长前来解答!一句话,跟对老师,抓基础,有计划的进行复习才是关键! 数学基础非常重要,包括高等数学、线性代数和概率论等基础知识点。要确保对这些基础知识有扎实的掌握。 按照教材的顺序&#xff…...

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法 Vue3【二十一】Vue 路由模式和普通组件目录结构 createWebHistory history模式:url不带#号,需要后端做url适配 适合销售项目 利于seo crea…...

【交易策略】#22-24 残差资金流强度因子

【交易策略】#22-24 残差资金流强度因子...

CentOS 7.9检测硬盘坏区、实物定位(三)

系列文章目录 CentOS 7.9上创建JBOD(一) CentOS 7.9上创建的JBOD阵列恢复(二) 文章目录 系列文章目录前言一、在系统中找到硬盘对应的盘符二、使用命令定位实物1.badblocks检测坏块2.对2T以上的硬盘检测(对本篇非必要…...

redis持久化方式—RDB

RDB快照 与AOF记录写操作命令不同,RDB直接记录内存中的二进制数据,reids恢复数据时,直接将RDB文件加载到内存中就可以了,听起来是不是RDB完虐AOF?那么看完本文,会让你的态度转变,因为RDB的缺点…...

java8实战1(让方法参数具备行为能力)

客户需求是查出颜色为green的苹果 客户需求变成查出颜色为red的苹果 假设现在客户需求又变了,找出黄色的呢?你想查什么颜色直接做为参数输入 让调用者输入颜色参数 问题是现在客户想把重量做为条件,来筛选苹果集合 这就为难了,客户需求随时会变 观察以上例子,发现有个共同…...

C#(C Sharp)学习笔记_多态【十九】

前言 个人觉得多态在面向对象编程中还比较重要的,而且不容易理解。也是学了一个下午,才把笔记写得相对比较完善,但仍欠缺一些内容。慢慢来吧…… 什么是多态? 基本概念 在编程语言和类型论中,多态(Poly…...

电子竞赛1——基于DDS的AM信号发生器

课题要求 产生AM调幅波; 要求:载波10K,被调制波1K; 短按键1(pin_143)改变该调幅波的调制度:25%、50%、75%; 长按按键1(pin_143)改变被调制信号频率&#…...

CentOS7的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash

bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash #!/bin/bash , #!/usr/bin/bash#!/bin/env bash , #!/usr/bin/env bash CentOS7的 /bin 是 /usr/bin 的软链接, /sbin 是 /usr/sbin 的软链接, [root3050 ~]# ll /bin lrwxrwxrw…...

代码随想录第四十一天打卡

01背包问题 二维 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili #include <iostream> #include <vector>…...

矩阵补全IGMC 学习笔记

目录 Inductive Graph-based Matrix Completion (IGMC) 模型 igmc推理示例&#xff1a; Inductive Graph-based Matrix Completion (IGMC) 模型 原版代码&#xff1a; IGMC/models.py at master muhanzhang/IGMC GitHub GNN推理示例 torch_geometric版本&#xff1a;tor…...

面试题之CSS

1. 引入样式的方式 外部样式 link import 区别 内部样式 /* 写在头部标签 */ <style></style>行内样式 2. 三行代码画三角形 .triangle{width:0px;border:100px solid;border-color:transparent transparent transparent red; }3.属性的继承 可继承的属性 …...

MFC扩展库BCGControlBar Pro v35.0新版亮点:重新设计的工具栏编辑器等

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了&#xff0c;这个版本改进类Visual Studio 2022的视觉主题、增强对多个…...

python调用SDK的问题

问题&#xff1a;Could not find module MvCameraControl.dll 原因&#xff1a;识别环境变量runtime异常 解决&#xff1a;指定具体绝对地址即可。MvCameraControl.dll的位置C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64 MvCamCtrldll WinDLL("MvCamer…...

html入门综合练习

综合练习 通过实际项目练习可以更好地理解和掌握HTML、CSS和JavaScript。以下是几个综合练习项目的建议&#xff1a; 项目1&#xff1a;个人简历网页 创建一个包含以下内容的个人简历网页&#xff1a; 个人简介&#xff08;姓名、照片、联系方式&#xff09;教育背景工作经…...

函数模板的具体化

函数模板优点是通用性&#xff0c;可以解决某个方面的普遍性问题&#xff0c;但是这个世界上的事情不是绝对的&#xff0c;有普遍的&#xff0c;就有绝对的。举个栗子&#xff1a; #include <iostream> using namespace std; template <typename T> void Swap(T &…...

【Linux 内存管理】

文章目录 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d; 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d;...

AJAX 数据库

AJAX 数据库 1. 引言 AJAX(Asynchronous JavaScript and XML)是一种流行的网络开发技术,它允许网页在不重新加载整个页面的情况下与服务器交换数据和更新部分网页内容。AJAX技术与数据库的结合,为现代网络应用提供了更加丰富和动态的用户体验。本文将探讨AJAX如何与数据库…...

力扣719.找出第K小的数对距离

力扣719.找出第K小的数对距离 二分答案 朴素版 双指针遍历数组 超过界限break auto check [&](int mid) -> bool{int res0;for(int i0;i<n-1;i)for(int ji1;j<n;j){if(nums[j] - nums[i] > mid) break;elseif(res > k) return true;}return false;};优…...

新兴县做网站的/全球搜是什么公司

前言 1、Promise 的意义&#xff1f; 在javascript的世界中&#xff0c;所有代码都是单线程执行的&#xff0c;由于这个“缺陷”&#xff0c;导致JavaScript的所有网络操作&#xff0c;浏览器事件&#xff0c;都必须是异步执行。Ajax可以解决这个问题&#xff0c;但是并不好复用…...

网站建设云主机云服务器/网站外链的优化方法

我国基因编辑技术的研发领先全球&#xff0c;但由于尚未出台基因编辑产品管理政策&#xff0c;相关产业面临技术研究领先、管理滞后、应用空白的局面。与会专家学者、企业代表纷纷结合国外基因编辑监管措施建言献策&#xff0c;呼吁基因编辑政策早日出台。 “目前&#xff0c;…...

部署wordpress最应该用什么os/重庆seo标准

前言 本文将会使用Python实现一个最简单的RPC框架&#xff0c;玩具向&#xff0c;不具有实用意义&#xff0c;但可以让你清醒的理解RPC框架的几个组成部分&#xff0c;只是比看Python自带的xmlrpc清晰。 本文需要一点Python socket基础。 如果你对Python Socket基础方面的内容不…...

推荐网站建设品牌/三亚百度推广公司电话

1、java.lang.Runtime.getRuntime().availableProcessors() Returns the number of processors available to the Java virtual machine&#xff1b;返回JVM上可用的CPU个数 转载于:https://www.cnblogs.com/zhi-leaf/p/10486188.html...

wordpress关闭手机访问/seo视频教程

shell脚本启停项目进程shell脚本强制停止指定名称进程shell脚本启动logstashshell脚本强制停止指定名称进程 关闭logstash 方式一 #!/bin/bash#注意事项 logstash_pid 和 之间不能有空格&#xff0c;否则会将logstash_pid当成单独的命令执行报错.logstash_pidps aux|grep …...

网站 建设需求/外包公司是正规公司吗

Android.jpg前言 最近做个项目&#xff0c;写了大量的自定义 View &#xff0c;突然今天就想写一个从 0 到1 的 Android 自定义 View 的文章&#xff0c;为了更好的总结和理解。最后&#xff0c;如果对每周的名企面试题或者本系列文章兴趣的可以关注公众号“于你供读” 目录 从…...