GC 算法的前世今生

 

1.垃圾回收器(GC)算法的前世今生

 

1.1 Mark-Sweep算法:

    Mark-Sweep算法,也称为:标记-清除法,这是最基本的垃圾回收器算法,过程如下:

    Mark-Sweep分为:标记阶段和清除阶段

    标记要回收的对象,清除回收被标记所占的空间

     PS:一个是效率问题,标记和清除过程的效率都不高;另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,当程序在以后的运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

 

1.2 Copying算法(复制算法):

    上面说了Mark-Sweep算法,有很大的问题,所以,算法不停的改进,产生了Copying算法,具体情况如下:

    ① 将内存分为大小相等的两块,每次只使用一块

    ② 将活着的对象复制到另一块上,使用的清除掉

    PS:不容易产生内存碎片,但是内存会缩减到以前的一半,如果存活对象多,效率会很低,所以可以于新区的时候。

 

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

    为了解决,空间浪费的问题,算法继续改进,Mark-Compact算法问世,具体情况如下:

    标记阶段和Mark-Sweep一样

    完成标记后,不直接清除回收对象,将对象移向一段

    清理边界内存

    ps:标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

 

1.4 Generational Collection算法

    分代收集算法,听名字就知道,因为我们根据存活的生命周期分为了:新生代,老年代和永久代,具体情况如下:

    • 根据存活的生命周期将内存分为若干个区:新生代和老年代和永久代

    • 新生代:每次都回收大量对象——>Copying复制法

    • 老年代:每次都回收少量对象——>Mark-Compact法

    • 永久代:存储class类,常量,方法描述:回收废弃常量和无用类

    • 分代收集法:也就是Jvm的垃圾回收所使用的算法,这种算法,既提高了内存空间的使用,而且根据各代的特点,针对处理,减少了cpu的使用率,提高了性能。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值