JVM垃圾收集算法(第二种)

一.复制算法(Copying)

为了改进标记-清除算法存在的效率低的问题,一种使用双存储区的垃圾收集器出现了,被人们称为复制算法

(1).简介以及回收过程

复制式回收器将堆划分为两个大小相等的半区(semispace),分别是来源空间(fromspace)和目标空间(tospace)

1.分配空间时,空间不足进行垃圾回收

假设堆是一块连续的内存空间,当堆的空间足够时,在来源空间1中分配新对象的方法是根据对象的大小简单的增加空闲指针,如果可用空间不足,则进行垃圾回收.

2.复制

将存活的对象从来源空间迁出,再回收完成后,所有存活对象将紧密的排布在目标空间的一端

在这里插入图片描述

(2).缺点

占用了双倍的内存空间,空间浪费大

(3).有趣理解

复制算法(Copying)。还是采用之前的餐厅示例,餐厅被垃圾收集机器人分成南区和北区两个大小完全相同的部分。午餐时,所有人都先在南区用餐(因为空间有限,用餐人数 自然也将减少一半〉 ,用餐时可以随 使用餐巾纸。当垃圾收集机器人认为有必要回收废旧餐巾纸时,它会要求所有用餐者以最快的速度从南区转移到北区,同时随身携带自己正在使用的餐巾纸。等所有人都转移到北区之后,垃圾收 机器人只要简单地把南区中所有散落的餐巾纸扔进垃圾箱就算完成任务了下一次垃圾收集的工作过程也大致类似,唯 的不同只是人们的转移方向变成了从北区到南区。
----摘抄自<深入理解JVM+G1+GC>


  1. 在<<垃圾回收算法手册>>当中这里写的是目标空间,我也是第一次看不太理解,我感觉写成来源空间是不是对于这个过程好理解一点?也希望大神们指点</抱拳> ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值