# 七.内存管理

前言

JavaScript 的内存管理是自动进行的,在创建变量(对象,字符串等)时自动进行了内存分配,之后在代码执行,使用变量时占用这个内存,当不再使用变量后就内存会被回收,释放掉。在 JavaScript 中,这个过程被称为垃圾回收机制。

# 1.生命周期

不管什么语言,内存的生命周期基本是一致的,一般为以下几个阶段:

  • 分配你所需要的内存。
  • 使用分配到的内存(读,写)
  • 不需要时将其释放,归还

JavaScript 语言中,第一步和第三步是 JavaScript 引擎自动进行的

JavaScript 引擎是一个专门处理 JavaScript 脚本的虚拟机。它本质上就是一段程序,可以将 JavaScript 代码编译为不同 CPU 对应的汇编代码,此外还负责执行代码,分配内存和垃圾回收等等

# 2.内存结构

JavaScript 引擎的内存结构可以粗略分为两个部分:栈(Stack)、堆(Heap)

# 2.1 栈(Stack)

主要用于存放基本类型和变量类型的指针。栈内存自动分配大小相对固定的内存空间,并由系统自动释放。

# 2.2 堆(Heap)

主要用于存放对象类型数据,如对象,数组,函数等等。堆内存是动态分配内存,内存大小不一,也不会自动释放。

# 3.回收算法

JavaScript 引擎中有一个垃圾回收器(gc),它的主要作用是跟踪内存的分配和使用,以便当分配的内存不再使用时,自动释放它

# 3.1 引用计数

# 3.2 标记清除