GC原理以及实现方式

  • 原理
      内存空间的回收
  • 实现方式
      1.标记清除法(since 1960)
       
    image.png

       分为两个阶段
        - 标记阶段:标记出可以回收的对象。
        - 清除阶段:回收被标记的对象所占用的空间
    两个缺点 标记和清除的效率都不高,容易产生大量不连续的内存碎片,给后续大对象没有足够的连续的空间从而提前触发新的一次垃圾收集动作.
    垃圾算法都是在此基础上进行修改的
    2.复制算法(新生代比较好)
    只使用一半内存,要回收的时候把"活"着的拷贝过去,存活的少复制的时间少,存活的多复制的时间长.
      3.标记压缩算法
       新生代有比较好的复制算法,老年代存活率比较高,这样会有多的复制才做不合适,标记压缩算法是将存活的对象压缩到内存的一端,使他们紧凑的排序到一起,然后对边界以外的内存进行回收,结束后,已用和未用都再各自的一边.解决清除算法效率低和容易产生大量内存碎片的问题.
      4.引用计数法
        它的引用计数器就加 1 ,引用失效时就减 1 。当引用计数器中的值变为 0 ,则该对象
    就不能被使用,变成了垃圾。假如A类里面有B类 B类里面有A类,计数器就不能为0,就无法被回收 
      5.根搜索法(可达性分析)
      基本思想就是选定一些对象作为 GC Roots,以Roots为起点开始向下搜索,当一个对象不可达时,即证明了他可以被回收处理
      6.分代收集算法 (https://blog.csdn.net/en_joker/article/details/79737533)
      引用文中的一个图
    image.png

你可能感兴趣的:(GC原理以及实现方式)