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

JVM之经典垃圾回收器

一、垃圾回收算法

1. 标记-清除(Mark-Sweep)
  • 步骤
    1. 标记:遍历对象图,标记所有存活对象。
    2. 清除:回收未被标记的垃圾对象。
  • 特点:简单,但会产生内存碎片。
2. 标记-复制(Mark-Copy)
  • 步骤
    1. 将内存分为两个区域(From 和 To)。
    2. 标记存活对象,复制到 To 区。
    3. 清空 From 区,交换 From/To 角色。
  • 特点:无碎片,但浪费一半内存。
3. 标记-整理(Mark-Compact)
  • 步骤
    1. 标记存活对象。
    2. 整理存活对象到内存一端。
    3. 清理边界外的空间。
  • 特点:无碎片,但整理耗时。
4. 分代收集
  • 核心思想:将堆分为新生代和老年代,分别用不同算法。
  • 新生代:标记-复制。
  • 老年代:标记-清除或标记-整理。

二、收集器执行流程图示

1. Serial / Serial Old
[新生代(标记-复制)]
1. 暂停所有用户线程(STW)┌───────────┐       ┌───────────┐│  From区   │ ----> │   To区    ││存活对象复制│       │ 清空后作为 │└───────────┘       |  新From   |└───────────┘[老年代(标记-整理)]
1. 标记存活对象
2. 整理到内存一端
3. 清理剩余空间
2. ParNew
[多线程 标记-复制]
1. STW,多个线程并行复制存活对象2. 清空 From 区
3. Parallel Scavenge / Parallel Old
[新生代(标记-复制)]
1. 多线程快速复制,专注吞吐量[老年代(标记-整理)]
1. 多线程整理,最大化利用CPU
4. CMS
[标记-清除算法]
1. 初始标记(STW短暂) --> 标记根对象│
2. 并发标记          --> 线程与用户线程并行标记│
3. 重新标记(STW)    --> 修正并发期间的变动│
4. 并发清除          --> 清理垃圾(产生碎片)
5. G1
[混合算法(标记-复制 + 标记-整理)]
1. 初始标记(STW短暂)  │
2. 并发标记          │
3. 最终标记(STW)    │
4. 筛选回收(STW可控) --> 选择垃圾最多的Region复制/整理
http://www.xdnf.cn/news/14059.html

相关文章:

  • C++数据结构与二叉树详解
  • Kubernetes》》k8s》》Namespace
  • ProfibusDP转ModbusRTU网关,流量计接入新方案!
  • React 中如何获取 DOM:用 useRef 操作非受控组件
  • 珈和科技:无人机技术赋能智慧农业,精准施肥与病虫害监控全面升级
  • Perf学习
  • 使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码
  • Spring Boot配置文件优先级全解析:如何优雅覆盖默认配置?
  • 盲超分-双循环对比学习退化网络(蒸馏)
  • Cursor 生成java测试用例
  • k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集
  • npx 的作用以及延伸知识(.bin目录,npm run xx 执行)
  • AI 推理框架详解,包含如COT、ReAct、LLM+P等的详细说明和分类整理,涵盖其原理、应用场景及对比分析
  • Linux 线程互斥
  • Power BI 中 EXCEPT() 函数的使用指南
  • 悟空CRM系统部署+迁移
  • Vue.directive自定义v-指令
  • 【AI部署】腾讯云GPU-常见故障—SadTalker的AI数字人视频—未来之窗超算中心 tb-lightly
  • JAVA中多线程的经典案例
  • 4.黑马学习笔记-SpringMVC(P43-P47)
  • 学习设计模式《一》——简单工厂
  • 算法驱动光场革命:SLM技术引领智能光学新时代
  • 用 NLP + Streamlit,把问卷变成能说话的反馈
  • 红宝书第五十一讲:Web Components:创造你自己的HTML标签
  • 习题2.3 数列求和-加强版
  • PHP发送邮件
  • 【刷题Day19】HTTP的各个版本(浅)
  • 记录git stash误删除恢复方法
  • 探索 JavaScript 中的 Promise 高级用法与实战
  • 什么是MMOE?