Skip to content
大纲

垃圾回收

js 内存概念

基础类型保存在栈中,系统会自动处理 引用类型,栈只保存堆的引用地址,值保存在堆中,垃圾回收针对的就是这个堆中的引用数据。

全局变量的引用类型,会一直存在应用的生命周期里,不会被垃圾回收清除,但可以把该变量置为 null,那么它将被垃圾回收器回收,即使它是全局对象的属性。

引用计数法

变量声明、引用计数+1,变量被重新赋值-1,等于 0 时,被执行

弊端

循环引用,导致引用无法清除

标记清除法

垃圾回收器区将所有内存中的对象打上标记,然后从根结对象开始遍历,把还在上下文中的活动变量去掉标记,然后清理所有带标记的对象

弊端

内存碎片化,分配速度慢。老生代会有标记整理算法去解决

分代回收法

新生代

内部又分为使用区,空闲区

  1. 新声明的对象都会放入使用区
  2. 垃圾回收时,会在使用区中寻找活动的对象,将其复制到空闲空间,如果标记有经历过一次的 scavenge 算法(垃圾回收)的则晋升到老生代的存储区里
  3. 然后清空使用区,将当前空闲区和使用对调

老生代

使用标记清除法和标记整理算法回收

Released under the MIT License.