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


    一:复制算法

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

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

           

    二: 标记-清除算法

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

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

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

      

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

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

      

      

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

      执行过程:

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

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

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

      优缺点:

        优点:

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

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

        缺点:

          效率上说,低于复制算法

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

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

  • 相关阅读:
    面向对象进阶
    初识面向对象
    模块和包
    day 17递归函数
    pip命令无法使用
    Python中的iteritems()和items()
    C# 截取字符串
    Python连接Mysql数据库
    【PYTHON】 Missing parentheses in call to 'print'
    javaScript中with函数用法实例分析
  • 原文地址:https://www.cnblogs.com/alenblue/p/12923659.html
Copyright © 2020-2023  润新知