程序员

GC算法介绍

2021-01-14  本文已影响0人  翔子丶
GC定义和作用
GC里的垃圾是什么
常见GC算法
引用计数算法

内存管理中,如果前者对后者有访问权限(隐式或显示访问),则说明一个对象引用另一个对象(js对象有对其原型(隐式引用)和对其属性(显示引用)的引用)

引用对象算法简单理解为'该对象有没有其他对象引用到它,即没有任何对象指向它,如果没有,该对象就会被垃圾回收机制回收

引用计数法优缺点
  1. 优点

    • 发现垃圾时立即回收(根据对象当前引用是否为0判断是否为垃圾,如果发现为0时就立即释放空间)
    • 最大限度减少程序暂停
  2. 缺点

    • 无法回收循环引用的对象

      function fn() {
        const obj1 = {}
        const obj2 = {}
      
        obj1.name = obj2
        obj2.name = obj1
      
        return 'xx'
      }
      fn()
      
    • 时间开销大、资源消耗大

标记清除算法

为了解决循环引用的问题,现代浏览器都采用标记清除算法

该算法把“对象是否不再需要”简化定义为“对象是否可以可达”’

markSweep.gif
标记清除算法优缺点
  1. 优点:解决循环引用问题
  2. 缺点:
    • 空间碎片化:回收的垃圾在地址上不连续的,如果后面申请的对象空间刚好匹配所回收的空间,就可以使用,如果没有满足的大小,就需要重新申请内存空间;空间不能得到最大化的使用,浪费空间
    • 不会立即回收垃圾对象
标记整理算法

在标记清除时,清除数据后会导致清除的空间不再连续,下次存储数据时也是不连续的,所以在标记清除上增加了对内存空间的整理也就是(标记整理),解决了空间碎片化问题,其实就是标记清除的增强版

image-20210113090322502.png image-20210113090336952.png image-20210113090345794.png

优点:减少碎片化,标记清除的提升,标记阶段一样,只是在清除阶段多了整理内存空间的步骤

缺点:不会立即回收垃圾对象

上一篇 下一篇

猜你喜欢

热点阅读