Jvm调优总结--2:基本垃圾回收算法

本文深入解析了五种主要的垃圾回收算法:引用计数、标记-清除、复制、标记-整理及分代收集。每种算法都有其特点与适用场景,如复制算法虽避免了内存碎片但需双倍内存空间;分代收集则根据对象生命周期优化回收过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照基本回收策略分:

引用计数(Reference Counting):

对象有一个引用,增加一个引用则增加一个计数,删除一个引用则减少一个计数,垃圾回收的时候,只对收集计数为0的对象。(最致命的是无法处理循环引用的问题)

  1. 标记-清除(Mark-Sweep):
    在这里插入图片描述
    第一阶段:从引用根节点开始标记是所有被引用的对象。第二阶段:遍历整个堆,把未标记的对象清除。(此算法需要暂停应用,还会产生内存锁片——存储的东西比较大,一个节点存储不了,多余的部分按内存碎片的形式存储)
  1. 复制(Copying):
    在这里插入图片描述
    把内存空间划分为两个相等的区域,每次只使用一个。垃圾回收时,遍历当前使用的区域,把正在使用中的对象复制到另一个区域中。此算法只处理正在使用的对象,复制成本小,不会出现内存碎片的问题(缺点就是需要两倍的内存空间)
  1. 标记-整理(Mark-Compact):
    在这里插入图片描述
    结合“标记-清除”和“复制”两个的优点。第一阶段:从根节点开始标记所有被引用的对象,第二阶段:遍历整个堆,清除未标记对象并把存活对象“压缩”到堆的其中一块,按顺序排放。

按分区对待的方式分:

  1. 增量收集:实时垃圾回收算法——在应用进行的同时进行垃圾回收
  2. 分代收集:基于对对象生命周期分析后得出的垃圾回收算法——把对象分为年青代、年老代、持久代,对不同的生命周期的对象用不同的算法进行回收。

按系统线程分:

  1. 串行收集:使用单线程处理垃圾回收,无需多线程交互,容易实现,效率高,适合单处理器机器,也可以用在小数据量(100M左右)情况下的多处理器机器上(需要暂停整个运行环境)
  2. 并行收集:使用多线程处理垃圾回收,速度快,效率高,CPU数目越多,越能体现出优势(需要暂停整个运行环境)
  3. 并发收集:系统在垃圾回收时会明显的暂停,堆越大时间越长

Jvm调优总结–1:概念
Jvm调优总结–2:基本垃圾回收算法
Jvm调优总结–3:垃圾回收面临的问题
Jvm调优总结–4:分代垃圾回收
Jvm调优总结–5:典型配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值