JS的内存管理

81 阅读1分钟

无论是什么编程语言,在代码执行的过程中都是需要给他们分配的内存的,不同的是某些编程语言需要自己来管理内存,某些编程语言是可以自动管理内存的。JS就是属于可以自动管理内存的编程语言。

内存管理的生命周期: 一:分配内存(申请) 二:使用内存(存放一些东西,比如对象) 三:用完后不需要用了,释放内存

JS会在定义变量的时候为我们分配内存 如果定义的变量是基本数据类型 (string,number,null,undefined,boolean,symbol) 那么会直接在栈空间进行内存的分配 如果定义的变量是复杂数据类型 (object array function) 那么会在堆内存中开辟一块空间,并且将这块空间的指针返回值变量引用

当我们需要释放内存时,JS的垃圾回收机制是GC算法

常见的GC算法:

1.引用计数:

当一个对象有一个引用指向它时,那么这个对象的引用就加一,当这个对象的引用为0时,就把他销毁。

弊端:会产生循环引用

var obj1 = {friend: obj2}
var obj2 = {friend: obj1}

在这里插入图片描述

这样的话内存永远不会销毁,容易引起内存泄漏

2.标记清除:

这个算法是设置一个根对象(root object),垃圾回收器会定期从这个根开始,找所有根开始有引用到的对象,如果有对象没有引用到,那么就会被认为是垃圾而清除掉。

在这里插入图片描述

这个算法就很好的解决了循环引用的问题

JS所采取的GC算法也是标记清除法