VM中常见的几种垃圾回收算法

VM中常见的几种垃圾回收算法,以便您更好地理解垃圾回收的概念。常见的垃圾回收算法包括:

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


标记(Mark)阶段:从根对象(通常是静态变量和正在执行的方法中的局部变量)开始,递归地访问所有可达的对象,并标记它们为“存活”。
清除(Sweep)阶段:遍历整个堆内存,回收未被标记的对象所占用的空间。

复制(Copying)算法


1 将可用内存划分为两个等大小的区域。在任意时间点,只有其中一个区域被使用,另一个区域是空闲的。
2 当前使用的区域内存耗尽时,存活的对象会被复制到另一个空闲区域,然后整个当前区域会被清理掉。
这种算法简单且高效,但代价是内存的使用率降低了(因为只有一半的内存是可用的)。

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


标记阶段与标记-清除算法相同。
整理(Compact)阶段:移动所有存活的对象,使它们紧挨着彼此,然后直接清理掉边界以外的内存。
这种算法可以提高内存的使用效率,但移动对象会引入额外的开销。
分代收集(Generational Collection)算法:
基于一个观察结果:大多数对象的生命周期都很短。因此,JVM将堆内存划分为几个不同的区域(通常是新生代和老年代),并针对不同区域应用不同的垃圾回收策略。
新生代通常使用复制算法,因为大多数对象都在这里快速创建和销毁。
老年代则可能使用标记-清除或标记-整理算法,因为这里的对象存活时间较长。
整理阶段有:
整理(压缩)算法分类:
随机整理(双指针算法):
线性整理:
LIsp2整理算法(三指针算法)
单次遍历算法
整理的好处可以将不同页中的数据,整理到一起,这样当内存访问的时候加载一页数据,说不定需要的数据都在这一页中,减少了页加载。

分代收集(Generational Collection)算法


基于一个观察结果:大多数对象的生命周期都很短。因此,JVM将堆内存划分为几个不同的区域(通常是新生代和老年代),并针对不同区域应用不同的垃圾回收策略。
新生代通常使用复制算法,因为大多数对象都在这里快速创建和销毁。
老年代则可能使用标记-清除或标记-整理算法,因为这里的对象存活时间较长。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值