【JVM】垃圾回收算法

本文介绍了JVM的几种垃圾回收算法,包括标记清除、标记复制、标记整理(压缩)算法,探讨了它们的优缺点和适用场景。此外,还讨论了分代收集理论以及针对不同对象存活周期的特点选择合适的垃圾收集策略。
摘要由CSDN通过智能技术生成

1、标记清除算法

标记的是存活对象,分别标记可用对象和不可达对象,从gcroot出发只能找到引用链的对象,垃圾是标记不到的。然后从堆节点遍历开始清除标记的对象,也就是不可达对象。它是最基础的收集算法,后续算法都是以此为基础,对其缺点改进的。

缺点:

标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

(1)标记和清除两个过程都比较耗时,效率不高

(2)会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

1.2、标记清除算法的衍生规则之分配(动态分区分配策略)

首次适应算法(Fisrt-fit)

首次适应算法(Fisrt-fit)就是在遍历空闲链表的时候,一旦发现有大小等于需要的大小之后,就立即把该块分配给对象,并立即返回。

如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链( 或空闲分表),找到大小能满足要求的第一个空闲分区。

最佳适应算法(Best-fit)

最佳适应算法(Best-fit)就是在遍历空闲链表的时候,返回刚好等于需要大小的块。

算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。

如何实现:空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值