垃圾回收算法

垃圾回收算法

标记-清除算法

清除:并不是真正的置空,下次有新对象时,判断垃圾空间是否够,不够则覆盖

优点:易于理解

缺点:效率低 清理出的空闲内存不连续 需一个列表记录垃圾对象地址

复制算法

解决标记清除算法的缺陷,内存分两块,每次只使用一块,回收时将正在使用的复制到未被使用的 清除使用内存中的所有

优点:实现简单 效率高

缺点:需两倍的内存空间

应用:新生代的S1和S2

标记-压缩

压缩:将存货对象压缩到内存的一端,按顺序排放

优点:不会产生内存碎片

缺点:效率<复制算法(效率低)

分代:不同区域使用不同的垃圾回收算法

新生代:幸存者1 ··· 幸存者2

老年代:标记压缩,标记清除,混合实现

增量收集和分区算法:

垃圾回收时,用户线程要停止(STW)

再次回收部分垃圾,回收线程和用户线程交替执行,减少用户停顿时间

缺点:切换效率开销大,每次回收垃圾少

对象引用

强引用

强引用不会被回收,即使内存不够用 报OOM 也不会回收

软引用

使用SoftReference进行标记

垃圾回收后,内存不够用,会回收软引用

若弱引用回收后,内存不够用,报OOM

弱引用

使用WeakReference进行标记

下一次垃圾回收时无论内存是否足够都会被回收

虚引用

幽灵引用,幻影引用 所有引用类型中最弱的

使用PhantomReference标记 相当于没有引用,随时可被回收

垃圾回收器

CMS回收器(追求低延迟)

回收时,用户线程,GC线程并发执行

追求低停顿

优点:并发收集,低延迟

缺点:产生内存碎片

​ 并发时占用用户线程,同时执行,吞吐量下降

G1(区域分代式)分区垃圾收集

JDK7之后引入的新的回收器

并行回收器,把堆内存分割成很多区域,回收的避免整堆回收

保证低延迟,提高吞吐量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值