阅读 72

JS性能优化之标记清除算法

什么是标记清除算法?

标记清除算法是一种直接的全面停顿算法。简单的说,它们找出所有不可达的对象,并将它们放入空闲列表Free。

标记清除算法的运行过程

清扫过程将分为标记阶段和清扫阶段。

  • 标记阶段

    • 遍历所有对象找标记活动对象

  • 清扫阶段 遍历所有对象清除没有标记对象,同时他会清除第一阶段所作的标记,便于之后可以进行正常的工作,

图示

image.png

如图所示,在我们 global中使用,我们会递归下面的属性,并为可达对象添加一下对应的标记,而a1b1并没有在global中使用,就会在下一轮中被清除掉

标记清除算法优缺点

优点

正所谓人无完人,算法也是如此没有算法是百分之百完美的,有优有劣,但是人都是比较出来的嘛!相对于引用计算算法,他有一个非常非常的大的优势就是它可以回收互相引用的对象值。哈哈哈哈哈哈!

缺点

image.png如图所示,我们模拟内存的存储情况,红色区域是我们的可达对象,在可达对象有两个无法达到的区域,这种情况下,在进行清除操作的时候,左右两个会被清除,并将空间放入空闲空间,之后内容进入的时候再分配给该对象。

空间碎片化image.png这种方式清理出来的内存是不连续的,产生内存碎片,需要维护一个空闲列表,像我们只有回收虽然是回收了3个节点,但是因为不联系的关系空间的使用并不正常完美

总而言之

  • 效率不高

  • 在进行GC的时候,需要停止整个应用程序,导致用户体验差

  • 这种方式清理出来的内存是不连续的,产生内存碎片,需要维护一个空闲列表;


作者:是洋柿子啊
链接:https://juejin.cn/post/7028739592014528542

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐