JS垃圾回收机制
前言
个人拙见,前端其实是不太好回答这个问题的,因为垃圾回收是浏览器帮前端做的,所以这就涉及到了C++。那么C++关我前端什么事?但是别人面试官问你,你还是得回答的呀!故写此文章记录。
正文
什么是垃圾?
- 没有被引用的对象就是垃圾。
- 如果有多个对象互相引用,形成一个环,但是外部访问不到,它们也是垃圾。
如何捡垃圾?
标记-清除算法。
- 标记阶段:从根集合出发,将所有活动对象及其子对象打上标记
- 清除阶段:遍历堆,将非活动对象(未打上标记)的连接到空闲链表上
引用-计数算法。
每次新建对象、赋值引用和删除引用的同时更新计数器,如果计数器值为0则直接回收内存。