一、什么是垃圾回收机制
JavaScript具有自动垃圾回收机制,执行环境会负责管理代码执行过程中使用的内存。原理很简单:找出不再继续使用的变量,然后释放其占用的内存。垃圾收集器会按照固定的时间间隔周期性地执行这一操作。
二、常见的垃圾回收策略
- 标记清除:标记清除是最常用的垃圾收集方式。当变量进入环境时,将变量标记为“进入环境”,当变量离开环境时(如函数执行结束),将变量标记为离开环境。
第一步:将所有变量都加上标记
第二步:取消环境中的变量以及被环境中的变量引用的变量的标记
第三步:被标记的变量被视为准备删除的变量,垃圾收集器完成清除工作
- 引用计数:当声明一个变量并将引用类型赋值给该变量时,这个值的引用次数为1,同一个值被赋给另一个变量,则该值的引用次数+1,相反,如果该变量被赋予另一个值,则引用次数-1。
三、关于垃圾回收机制的个人理解(离开环境时变量会被清除)
首先先贴上代码图:
- 当未进行点击操作时,
{ name: 'Tom' }
被obj 对象所引用的,此时无法被回收释放。 - 当用户进行第一次点击操作时,
{ name: 'Tom' }
已经无法被访问到,此时被回收释放。 - 当用户进行第二次点击操作时,
{ name: 'Tom' }
被重新赋值给 obj 对象(需要注意的是此时的{ name: 'Tom' }
与之前的并不是同一个,因为之前的已被回收),此时 obj 有了新的引用。 - 当用户进行第三次点击操作时,obj 再次被赋值为 null ,上次被引用的对象
{ name: 'Tom' }
会被回收释放。