• jvm-垃圾清除阶段的GC算法


    一:复制算法

      核心思想: 将内存空间一分为二,每次只是用其中一块,在垃圾回收时,将还存活的对象复制到另一块内存空间,原来的内存空间全部清除,

      然后交换两块内存的角色.

           

    二: 标记-清除算法

      当堆中的可用内存被耗尽时,就会停止整个应用程序(用户线程)[stop the world],然后进行两项工作;第一是标记,第二是清除

      1,标记: 收集器从根节点开始遍历,沿着引用链标记所有被引用的对象,一般是在对象的header中记录为可达对象

      2,清除: 收集器对堆内存从头到尾进行线性遍历,如果发现某个对象在其header中没有标记为可达对象,则将其回收.

      

      mark-sweep(标记清除算法的缺点和注意事项)

        执行效率不算高,产生内存碎片,维护一个空闲列表,增加了内存开销

      

      

    三:标记-整理(压缩)算法

      执行过程:

      1,第一阶段和标记-清除算法一样,从根节点标记所有引用的对象,

      2,第二阶段将所有存活的对象压缩到内存的一侧,按顺序排放(使用指针碰撞为新对象分配内存空间)

      3, 清理边界外的所有空间

      优缺点:

        优点:

          跟标记清除算法比: 没有内存碎片,新对象分配内存使用指针碰撞,不需要维护一个空闲列表

          跟复制算法比: 内存空间利用效率高

        缺点:

          效率上说,低于复制算法

          移动对象时,如果对象被其他对象引用,还需要调整引用的地址

          移动时必须停止所有用户线程(stop the world)

  • 相关阅读:
    变量的解构赋值 (1)对象
    变量的解构赋值 (1)数组
    const 命令
    let 命令
    【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
    【BZOJ3771】Triple 生成函数+FFT
    【BZOJ4976】宝石镶嵌 DP
    【BZOJ4972】小Q的方格纸 前缀和
    【BZOJ4998】星球联盟 LCT+并查集
    【BZOJ4710】[Jsoi2011]分特产 组合数+容斥
  • 原文地址:https://www.cnblogs.com/alenblue/p/12923659.html
Copyright © 2020-2023  润新知