CG算法的分类

一、引用计数法(未被java采用)

1、原理:
  对于⼀个对象A,只要有任何⼀个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1,只要对象A的引用计数器的值为0,则对象A就会被回收。
2、问题:
(1)引用和去引用伴随加法和减法,影响性能;
(2)很难处理循环引用。

二、标记清除法

1、原理:
  现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。⼀种可行的实现是,在标记节点,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后在清除阶段,清除所有未被标记的对象。
2、问题:
(1)标记和清除两个过程效率不高,产生内存片导致需要分配较大对象时无法找到足够的连续内存而需要触发⼀次GC操作

三、标记压缩法

1、原理:
  适合用于存活对象较多的场合,如老年代。它在标记-清除算法的基础上做了⼀些优化。标记阶段⼀样,但之后,将所有存活对象压缩到内存的⼀端。之后,清除边界外所有的空间。
2、优点:
(1) 解决了标记-清除算法导致的内存碎片问题和在存活率较高时复制算法效率低的问题。

四、复制算法

1、原理:
   将原有的内存空间分为两块,每次只使⽤其中⼀块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使⽤的内存块中,之后清除正在使⽤的内存块中的所有对象,交换两个内存的角色,完成垃圾回收。
2、问题:
(1) 不适用于存活对象比较多的场合,如老年代。

五、 分代回收法

1、原理:
根据对象存活周期的不同将内存划分为几块,⼀般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值