JVM 垃圾回收算法

本文介绍了JVM中的三种垃圾回收算法:标记复制、标记清理和标记整理。标记复制算法适用于年轻代,通过复制存活对象到另一块内存来避免碎片。标记清理算法简单但可能导致内存碎片。标记整理算法则在回收后整理内存,保持内存连续。这些算法在不同的GC收集器如CMS和G1中有不同的实现方式。

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

JVM 垃圾回收算法

垃圾回收算法主要有标记复制算法、标记清理算法、标记整理算法和分代理论。

在这里插入图片描述

分代理论

分代理论,是当前大多垃圾收集器使用的理论算法。它主要是解决对象生命周期不同设置的一种思想。

分代理论在不同垃圾回收器中是不一样的,在G1中分代理论虽说被继续沿用,但是,G1垃圾收集器使用的堆内存不在物理上进行隔离。即年轻代和老年代不存在物理上的隔离。但是CMS等其他收集器上,年轻代和老年代是独立的。

标记复制算法

标记复制算法主要适用于年轻代的一种算法思想。这个算法的思想是将内存区域划分为两个部分,当回收垃圾时,将不需要回收的对象移入另一块内存之中,将所有不需要回收的对象放到另一块区域之后,将需要回收的所有对象清楚。
这种算法效率比较慢,因为它涉及到对象的移动,并且需要额外的内存,造成内存有一部分未完全适用。
如下图所示,标记复制算法的整体流示意图
在这里插入图片描述

标记清理算法

标记清理算法和标记复制算法不同,它没有对堆内存进行预留空间。当JVM标记到对象是可回收对象之后,会对堆空间进行释放。它主要包括两个环节。

  1. 标记:对堆中的对象进行扫描,标记出可回收对象和不可回收对象
  2. 清理:清理所有可以回收的对象。

这种算法比较简单,是最基础的一种算法思想,但是它具有一定的弊端:
1. 内存碎片比较多,因为内存清理之后未对内存区域进行整理,长时间运行之后会造成堆内存中产生非常多的不连续内存
2. 效率问题,如果标记的内存过多,会造成运行效率不高

如下图所示,标记清理算法的整体流示意图
在这里插入图片描述

标记整理算法

标记整理算法,将堆中的对象进行整理标记,标记过程跟标记清理算法保持一致,将回收对象内存区域空间回收之后,会对堆内存空间进行整理,是内存占用空间在物理上是连续的。
标记整理算法流程如下:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值