当前位置: 首页 > 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…...

工业控制、通信设备、医疗仪器:MX30LF2G18AC-TI的嵌入式存储应用版图

MX30LF2G18AC-TI:2Gb SLC NAND闪存的工业级存储方案在工业控制、嵌入式系统以及通信设备等领域,非易失性存储器的选择直接影响设备的数据完整性、运行稳定性及长期供货保障。MX30LF2G18AC-TI是旺宏电子推出的一款2Gb SLC NAND闪存芯片,采用成…...

hover-effect 性能优化:确保你的 WebGL 扭曲效果流畅运行

hover-effect 性能优化:确保你的 WebGL 扭曲效果流畅运行 【免费下载链接】hover-effect Javascript library to draw and animate images on hover 项目地址: https://gitcode.com/gh_mirrors/ho/hover-effect hover-effect 是一款基于 WebGL 的 JavaScript…...

基于MCP协议与AI的智能收据处理服务器:从OCR到结构化提取实战

1. 项目概述:一个专为收据处理而生的MCP服务器如果你经常需要处理各种格式的收据、发票或账单,无论是个人记账、公司报销,还是财务审计,那么你肯定对“数据录入”这个繁琐环节深恶痛绝。一张张纸质或电子收据,上面的关…...

开发者知识管理工具CodingIT:架构设计与应用实践

1. 项目概述:一个面向开发者的“一站式”知识管理工具最近在整理个人技术笔记和项目文档时,我发现自己陷入了典型的“信息碎片化”困境:代码片段散落在Gist、笔记软件、本地文件甚至聊天记录里;项目文档要么是简陋的README&#x…...

射频PA中的ICC和ICQ电流是什么?

射频 PA 的 ICC 与 ICQ 深度解析 核心关联:ICQ(静态偏置)与 ICC(工作电流)直接决定 DLCA / ENDC / SRS / RX Desense 的系统稳定性。 一、拍板级定义:ICQ vs ICC 术语 全称 工作状态 核心关注点 ICQ Quiescent Current 静态(无信号或极小信号) 线性度、稳定性、瞬态响应…...

大恒相机USB3驱动冲突排查:设备管理器可见但软件无法识别的深度解析

1. 问题现象与初步排查 最近在调试大恒USB3相机时遇到了一个典型问题:设备管理器里能正常识别相机设备,但打开配套软件GalaxyView却死活找不到相机。这种"看得见摸不着"的情况在工业视觉开发中特别常见,尤其是当你同时安装了多个视…...

1394-AM75伺服驱动器

1394-AM75 是艾伦-布拉德LEY(Allen-Bradley)系列的一款伺服驱动器,控制精度高、响应迅速,适用于工业自动化中的精密运动控制。中间 15 条特点:结构紧凑,便于安装于控制柜内。支持宽电压输入范围&#xff0c…...

1.8.2 掌握Scala类与对象 - 单例对象与伴生对象

本次实战通过三个案例深入解析了 Scala 中 object 的核心机制,展示了其如何替代 Java 的 static 关键字。首先,通过 MathUtils 定义了存放常量与工具方法的独立单例对象;其次,利用 Person 类与其同名对象演示了“伴生对象”特性&a…...

簧片继电器可靠性设计与关键技术解析

1. Reed Relay可靠性设计的关键技术解析簧片继电器(Reed Relay)作为电子系统中的关键切换元件,其可靠性直接影响整个设备的长期稳定性。与传统电磁继电器相比,簧片继电器具有独特的结构优势和技术特点。本文将深入剖析提升簧片继电…...

ios蓝牙开发

一、蓝牙基本概念蓝牙&#xff1a;BLE (Bluetooth Low Energy/低功耗蓝牙)&#xff0c;一般应用苹果的官方框架基于 <CoreBluetooth/CoreBluetooth.h> 框架进行开发。中心设备&#xff1a;用于扫描周边蓝牙外设的设备&#xff0c;比如我们上面所说的中心者模式&#xff0…...