垃圾回收概述
- JavaScript具有垃圾自动回收机制
- 原理是:找出不再使用的变量,释放其内存空间,为此垃圾回收器会周期性的进行垃圾回收。
垃圾回收策略
在JavaScript中,垃圾回收有两种策略:
标记清除;
引用计数
1. 标记清除
标记清除是目前主流的垃圾回收机制,它的原理是,将当前不再使用的变量加上标记,然后回收其内存;比如一个位于函数中的局部变量,在进入函数时,给加上进入函数的标记,再函数执行完毕时,加上出函数的标记,由此,被加了出函数标记的变量,就是要被回收的变量;
2. 计数引用
引用计数的原理是:查看变量被引用的次数,如果变量被引用的次数是0,则此变量就要被回收。但是引用计数的变量在两个变量相互引用时存在循环引用的bug,解法是主动去接触变量,比如
// 循环引用
var element = document.getElementById('test');
var object = new Object();
object.test = element;
element.test = object;
// 主动接触引用
element = null;
手动接触的真正目的,是为了让值脱离执行环境,以便垃圾运行期下次回收时将其回收♻️。
管理内存
确保占用最少的内存空间,可以让页面获取更好的性能。而优化内存的最佳方式,就是为执行的代码只保存必要的数据,一旦数据不再有用,就及时将其值设置为null,这种方式叫做解除引用。
node中的内存管理
node也是一个JavaScript的运行环境。使用V8引擎,因此是V8的内存管理方式。
一般的后端语言中,对内存的使用没有什么限制,但是nodeJS却不一样,对于64G的内存,它只能使用1.5G,而对于32G的内存,它只能使用0.7G。这是由于垃圾回收机制限制,因此在使用变量时,可以通过手动解除变量,或者尽量少用闭包等方式。
网友评论