当前位置: 首页 > 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复制/整理

相关文章:

  • golang context源码
  • 目标检测中的混淆矩阵
  • GitHub Copilot在产品/安全团队中的应用实践:处理Markdown、自动化报告与电子表格、使用CLI命令等
  • 音视频元素
  • 【HFP】蓝牙HFP协议音频连接核心技术深度解析
  • 音视频小白系统入门课-2
  • 【AI部署】腾讯云GPU -—SadTalker的AI数字人访问web服务—未来之窗超算中心
  • hive的基础配置优化与数仓流程
  • Windows10,11账户管理,修改密码,创建帐户...
  • node.js 基础
  • python flask 项目部署
  • 在阿里云虚拟主机上启用WordPress伪静态
  • P2P用服务器运行所需的带宽资源
  • CAPL编程系列_02
  • 探索大语言模型(LLM):循环神经网络的深度解析与实战(RNN、LSTM 与 GRU)
  • linux 4.14内核jffs2文件系统不自动释放空间的bug
  • 6.数据手册解读—运算放大器(二)
  • 6.5 GitHub监控系统实战:双通道采集+动态调度打造高效运维体系
  • RAG知识库中引入MCP
  • Django ORM 定义模型
  • 大学2025丨对话深大人工智能学院负责人李坚强:产学研生态比“造天才”更重要
  • 澎湃回声丨23岁小伙“被精神病8年”续:今日将被移出“重精”管理系统
  • 外交部:中美双方并未就关税问题进行磋商或谈判
  • 工业富联一季度净利增长25%,云计算业务营收增长超50%
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 中国人保一季度业绩“分化”:财险净利增超92%,寿险增收不增利