JS垃圾回收| 青训营笔记

40 阅读2分钟

介绍一下JS的垃圾回收机制吧

垃圾回收

一般来说栈内存线性有序存储,容量小,系统分配效率高。而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。

JS有自动垃圾回收机制。执行环境会自动负责管理代码的内存回收。JS中有两种回收机制:

值类型采用标记清除,引用类型采用引用计数。

标记清除:当变量进入到执行环境时候,就会给他标记为“进入环境”,当变量离开的时候,就会给他标记为“离开环境”。当变量离开环境之后,当前执行环境变量不再能访问到变量的时候,垃圾回收机制就会将其视为“垃圾”,然后回收它们占用的内存空间。

引用计数:是跟踪记录每个值被引用的次数。如果一个引用类型的值赋值给变量时候,这个值得引用次数就是1,。同一个值又赋值给其他变量的话,就计数+1。如果获得该值的变量又引用了其他的值,则此值得引用次数减1。所以,当次值得引用次数为0时候,说明没有再引用此值了,就可以将其占用的空间回收回来。垃圾回收机制,就会将引用次数为0的值,回收其占用的空间。

在JS中,我们尽量少使用全局变量,如果全局变量不再使用,我们最好将其置为null来释放引用。确保占用最少的栈内存以便让页面拥有更好的性能。而局部变量,会在他们离开执行环境就被销毁。

全局上下文内的变量,因为页面不关闭,全局上下文的内容就不会释放。所以,我们优化:

1、尽量少用全局变量。

2、如果用了,用来及时释放,变量=null;

非全局上下文内的内容,依靠自动垃圾回收机制。

1、对于值类型来说,优化的方式,尽量在不用的时候不使用特殊方式保存上下文。

2、对于引用类型来说,优化的方式,不再使用一个引用类型时,及时释放(将所有的引用都去掉)变量=null;