美文网首页
GC 算法简介

GC 算法简介

作者: 咪雅先森 | 来源:发表于2019-01-28 00:26 被阅读0次

    GC 的概念
    Garbage Collection 垃圾收集
    1960年 List 使用了 GC
    Java 中,GC 的对象是堆空间和永久区

    1.引用计算法

    使用语言:
    COM
    ActionScript3
    Python

    存在的问题:
    性能问题
    循环引用

    2.标记-清除

    标记垃圾对象,清除

    3.标记-压缩

    标记垃圾对象,清除。重新移动至可用空间。
    适用于存活对象较多的场合,如老年代。
    是对 标记清除 的改良

    4.复制算法

    与标记-清除 算法相比,较高效。不适合存活对象软多的场合。
    必须有两块空间,一样大小,其中只有一块内存在使用。工作时,将所有存活对象复制到另一块空间。
    复制完成之后,两块空间角色发生交换。
    问题在于,对空间是一种费的。不发生GC时,另一块空间是没有使用的。

    5.分代算法

    依据对象的存活周期进行分类,短命的称为新生代,长命的称为老年代。
    根据不同代的特点,选取合适的收集算法
    1.少量对象存活时,适合复制算法
    2.大量对象存活时,适合标记清理或者标记压缩

    GC算法总结

    1.引用计数,没有被使用,因为不能解决循环引用的问题。
    2.标记-清除,老年代明确使用
    3.标记-压缩,老年代明确使用
    4.复制算法
    新生代明确使用

    少量存活对象,适合复制算法
    大量象存存活,适合标记清除 或 标记压缩

    所有的算法,需要能够识别一个垃圾对象,因些需要给出一个可触及性的定义
    如何识别对象是圾垃
    1.可触及性
    从根节点可以触及到的对象
    2.可复活的
    一是所有引用被释放,就是可复活的状态,即等死状态
    因为在 finalize() 中可能复活该对象
    3.不可触及的,真正可被回收的对象
    在 finalize() 后,可以进入不可触及状态
    不可触及的对象不能可复活
    可以回收

    相关文章

      网友评论

          本文标题:GC 算法简介

          本文链接:https://www.haomeiwen.com/subject/xadojqtx.html