javaScript的内存管理
js会在定义变量时为变量分配内存
其中又分为两种情况:
- 当变量为基本数据类型时:如String、Number、Boolean等,直接在栈空间进行分配;
- 当变量为复杂数据类型时,如Object、Array等,会在堆内存开辟空间,并且将这块空间的指针返回值当作变量引用。
JS的垃圾回收
由于内存的大小时固定的,所以当内存不再需要时,需要对其进行释放。
好在JS用有自动的垃圾回收机制,不用我们手动编写代码来实现。
js在垃圾回收时会使用到GC算法
常见的GC算法
- 引用算法:
当一个对象有一个引用指向它,那么对该对象的引用就会+1,所以当一个对象的引用为0时,就可以销毁该对象了;
但是这种算法会产生逊循环引用。
比如以下的情况:const obj1 = { name: obj2 }; const obj2 = { name: obj1 }
- 标记清除法:
该算法是设置一个根对象(root Object),垃圾回收器定义从这个根开始,找所有该根对象有引用到的对象,对于那些没有引用到的对象,就是不可用的对象。
这个就是相对主流的算法了。
此文章主要借鉴王红元。