网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1352|回复: 0
打印 上一主题 下一主题

Java虚拟机—— 垃圾回收(二)

[复制链接]

271

主题

284

帖子

1243

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1243

最佳新人活跃会员热心会员突出贡献优秀版主

跳转到指定楼层
楼主
发表于 2019-8-2 10:02:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
垃圾回收算法标记—清除

用可达性分析,先标记、再清除;

缺点:

①标记—清除之后会出现断断续续的空闲空间(内存碎片),空间无法高效利用,

②并且先标记后清除需要对堆空间前后两次遍历,效率不高;

复制算法

一开始,将堆空间内存分成两个部分A、B,只使用其中一部分,然后对A进行可达性分析,将可用的对象拷贝到另一个空间B去,再把A中的对象全部擦除,这样就把标记—清除算法的两个问题都解决了;

回收前:

回收后:

缺点:
①只使用一半堆空间,浪费一半的空间,
②如果对应的A那半部分出现极端情况(A全都是或大部分都是生命周期比较长的对象),那就需要全部拷贝);

标记—整理

先标记、再整理,先可达性分析,标记对象是否可用,然后将可用对象向一端移动,这样垃圾回收之后的堆空间的剩余空间是连续的;

回收前:

缺点:
效率也不高,不仅要标记存活对象,还要整理所有存活对象的引用地址,在
效率上不如复制算法;

回收后:


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 11:57 , Processed in 0.033064 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表