jvm垃圾回收算法

垃圾回收(Garbage Collection,GC)是自动内存管理的一种形式,用于自动释放不再使用的内存空间。不同的编程语言和运行环境可能会使用不同的垃圾回收算法。以下是一些常见的垃圾回收算法:

  1. 标记-清除(Mark-Sweep)算法

    • 标记阶段:遍历所有的根对象,标记所有从根对象可达的对象。
    • 清除阶段:遍历整个堆,清除所有未被标记的对象。
  2. 标记-整理(Mark-Compact)算法

    • 类似于标记-清除算法,但在标记完存活的对象后,会将这些对象移动到堆的一端,然后清理边界外的所有空间。这样可以避免内存碎片问题。
  3. 复制(Copying)算法

    • 将内存分为两个半区,每次只使用其中一半。当这一半内存使用完时,就将存活的对象复制到另一半区域,然后清理已使用过的那半区域。
  4. 增量(Incremental)垃圾回收

    • 将垃圾回收分成更小的步骤,分多次执行,以减少应用程序的暂停时间。
  5. 分代(Generational)垃圾回收

    • 基于这样一个假设:新创建的对象大部分会很快被回收,而存活下来的对象往往会活得更久。因此,将堆分为新生代和老年代,新生代的对象存活率低,使用复制算法;老年代的对象存活率高,使用标记-清除或标记-整理算法。
  6. 并行垃圾回收

    • 使用多线程来执行垃圾回收任务,以提高垃圾回收的效率。
  7. 并发垃圾回收

    • 垃圾回收线程与应用程序线程同时运行,以减少应用程序的暂停时间。
  8. 停止-复制(Stop-The-World, STW)

    • 在垃圾回收期间,暂停应用程序的所有线程,直到垃圾回收完成。这是最简单的垃圾回收策略,但对用户体验影响较大。
  9. 垃圾回收器(Garbage Collectors)

    • Serial GC:单线程的垃圾回收器,适用于单核处理器。
    • Parallel GC:多线程的垃圾回收器,是Serial GC的多线程版本。
    • CMS(Concurrent Mark Sweep):并发标记-清除垃圾回收器,尽量减少应用程序的暂停时间。
    • G1(Garbage-First):一种服务器端的垃圾回收器,旨在替换CMS GC,可以预测停顿时间,并且可以处理更大的堆。
    • ZGC(Z Garbage Collector):可扩展的低延迟垃圾回收器,可以处理数TB的堆内存。

每种垃圾回收算法都有其优缺点,适用于不同的场景和需求。垃圾回收器的设计者需要根据实际应用的特点和性能要求来选择或设计合适的垃圾回收算法。

相关推荐
鬼手点金2 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck3 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
江湖有缘3 小时前
Docker实战 | 使用Docker部署rmoments社交平台
jvm·docker·oracle
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网4 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
Nil2084 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
SL_staff4 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing4 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
dd聊技术4 小时前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端