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

【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解

导航

      • 一. 垃圾收集算法详解
        • 1. 分代收集算法
        • 2. 标记-复制算法
        • 3. 标记-清除算法
        • 4. 标记-整理算法
      • 二. 垃圾收集器详解
        • 1. Serial收集器
        • 2. Parallel Scavenge收集器
        • 3. ParNew收集器
        • 4. CMS收集器
      • 三. 垃圾收集底层三色标记算法实现原理
        • 1. 垃圾收集底层使用三色标记算法的原因?
        • 2. 垃圾收集器使用三色标记算法的步骤
        • 3. 多标-浮动垃圾
        • 4. 漏标-读写屏障
      • 四. CMS并发清理阶段会误删新生成的对象吗?
      • 五. 从Hotsport源码级别讲透读写屏障彻底理解三色标记
        • 1. 写屏障
        • 2. 写屏障实现原始快照(SATB)
        • 3. 写屏障实现增量更新
        • 4. 读屏障
        • 5. 记忆集和卡表

一. 垃圾收集算法详解

在这里插入图片描述

1. 分代收集算法

  根据对象存活周期的不同将内存分为几块。一般将堆分为新生代和老年代,根据不同年代的特点选择合适的垃圾收集算法。
如在新生代中,每次GC都会有大量的对象(99%)死去,所以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。
如老年代中对象的存活几率是非常高的,而且没有额外的空间进行分配担保,所以选择“标记-清除”或“标记-整理”算法进行垃圾收集。
注意:“标记-清除”或“标记-整理”算法会比复制算法慢10倍以上。

2. 标记-复制算法

  将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。
在这里插入图片描述
优缺点: 效率高,但是只能使用在年轻代,不能使用在老年代中,老年代中大多数的对象都是存活的,没有多余的担保空间来将内存一分为二。

3. 标记-清除算法

  算法分为“标记”和“清除”阶段:标记存活的对象,统一回收所有未被标记的对象(一般选择这种);也可以反过来,标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。
在这里插入图片描述
优缺点:
效率问题(如果需要标记的对象太多,效率不高)
空间问题(标

http://www.lryc.cn/news/181745.html

相关文章:

  • STM32复习笔记(四):独立看门狗IWDG
  • SpringBoot中常用注解的含义
  • 学位论文的写作方法,较好的参考文章
  • 基于SpringBoot的科研工作量获奖项目管理平台设计与实现(源码+lw+部署文档+讲解等)
  • 嵌入式Linux应用开发-驱动大全-第一章同步与互斥④
  • 算法-数学-斜率-直线上最多的点数
  • 项目进展(五)-修复PCB电路板,学习32位ADC芯片ADS1285
  • (三) Markdown插入互联网或本地视频解决方案
  • HPA (Horizontal Pod Autoscaler) In K8s
  • Ubuntu安装samba服务器
  • [SpringBoot] 8. aop 获取 request response
  • 同学苹果ios的ipa文件应用企业代签选择签名商看看这篇文章你再去吧
  • 【PyCharm Community Edition】:excel操作
  • 证书显示未受信任,生成的证书过期
  • VS+Qt+C++ GDAL读取tif图像数据显示
  • CSS 选择器-认识并应用选择器
  • 【教程】Autojs使用OpenCV进行SIFT/BRISK等算法进行图像匹配
  • [庆国庆 迎国庆 发文]云计算的概念
  • 计算机网络-计算机网络体系结构-概述,模型
  • 对示例程序spinner_asyncio.py进行修改使其能运行
  • Linux命令(93)之head
  • 使用Visual Studio调试排查Windows系统程序audiodg.exe频繁弹出报错
  • WebSocket实战之六心跳重连机制
  • Webpack 基础入门以及接入 CSS、Typescript、Babel
  • postgresql-自增字段
  • SpringBoot中使用Servlet和Filter
  • Monkey命令
  • 力扣 -- 279. 完全平方数(完全背包问题)
  • 在将对象 => JSON格式时,无法序列化部分属性
  • 用python表格初级尝试