04-GC的常见收集方法:标记清除、标记复制、标记整理算法、分代收集的原理与特点?

文章介绍了几种主要的垃圾回收算法,包括标记清除、标记复制和标记整理,分析了各自的优缺点。特别是,标记清除易产生内存碎片,复制算法则牺牲了一半内存,而标记整理解决了碎片问题但耗时较长。最后,文章提到了分代收集算法,这是大多数JVM采用的方法,根据对象生命周期将内存分为新生代和老年代,分别应用不同的垃圾回收策略。
摘要由CSDN通过智能技术生成

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

最基础的垃圾回收算法,分为两个阶段,标记和清除。
1.标记阶段标记出所有需要回收的对象
2.清除阶段回收被标记的对象所占用的空间
在这里插入图片描述
缺点:
1.容易产生大量的内存碎片,后续可能发生大对象不能找到可利用空间的问题
2.标记和清理两个过程效率都不高。需要扫描所有对象,堆越大,GC越慢

2.标记复制算法(Mark-Copying)

简称复制算法, 为了解决 Mark-Sweep 算法内存碎片化的缺陷而被提出。按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用
的内存清掉
在这里插入图片描述

缺点:
1.将可用内存缩小为原来的一半,代价高昂。
2.在对象存活率高的时候,效率有所下降。

3.标记整理算法(Mark-Compact)

结合了以上两个算法,为了避免缺陷而提出。标记阶段和 Mark-Sweep 算法相同,标记后不是清
理对象,而是将存活对象移向内存的一端, 然后直接清理掉端边界外的内存。
在这里插入图片描述
缺点:比Mark-Sweep耗费更多的时间进行整理

4.分代收集算法(Generational Collecting)

分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根据对象存活的不同生命周期将内存
划分为不同的域,一般情况下将 GC 堆划分为老生代(Tenured/Old Generation)和新生代(Young
Generation)。老生代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃
圾回收时都有大量垃圾需要被回收,因此可以根据不同区域选择不同的算法。

1.新生代与复制算法
在这里插入图片描述

2.老年代与标记复制算法
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值