常见GC算法

1. 介绍

GCGarbage Collection)就是垃圾回收机制的简写

1.1 GC算法

  • GC是一种机制,垃圾回收器会完成具体的工作
  • 工作的内容就是查找垃圾释放空间、回收空间
  • 算法就是工作时查找和回收所遵循的规则

JavaScript中的垃圾:

  • JavaScript中内存管理时自动的

  • 对象不再被引用时是垃圾

  • 对象不能从根上访问到时是垃圾

1.2 例如:

  • 程序中不再需要使用的对象

    function fn() {
      name = 'lg';
      console.log(`${name} is a coder`);
    }
    fn();
    
  • 程序中不能再访问到的对象

    function fn() {
      const name = 'lg';
      console.log(`${name} is a coder`);
    }
    fn();
    

2. 引用计数算法

原理:通过一个引用计数器维护当前对象的引用数,然后判断该对象的引用值是否为0,如果为0GC会对将所在的对象空间进行回收释放再使用


3. 标记清除算法

核心思想:分标记和清除两个阶段完成
1. 遍历所有对象将当前可达活动对象进行标记
/*
  可达对象:
    可以访问到的对象就是可达对象
    可达的标准就是从根出发是否能够被找到
    JavaScript中的根就可以理解为全局变量对象
*/
2. 遍历所有对象清除没有标记对象
3. 回收相应的空间

4. 标记整理算法

原理:

  1. 标记整理可以看作是标记清除的增强
  2. 标记阶段的操作和标记清除一致
  3. 清除阶段会先执行整理,移动对象位置,让地址上产生连续

5. 总结

优点 缺点
引用计数算法 1. 可以即时回收垃圾对象
2. 减少程序卡顿时间
1. 无法回收循环引用的对象
2. 资源消耗较大
标记清除算法 可以回收回收循环引用的对象 1. 容易产生碎片化空间,浪费空间
2. 不会立即回收垃圾对象
标记整理算法 减少碎片化空间 1. 不会立即回收垃圾对象<br />2. 移动对象位置,回收效率慢
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容