# 八.内存管理

前言

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

# 1.生命周期

# 1.1 分配内存

# 1.2 使用内存

# 1.3 释放内存

# 1.4 静态生命周期

# 2.内存结构

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

# 2.1 栈(Stack)

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

# 2.1.1 所有权

  • rust 中每一个值被称为所有权的变量
  • 值,有且只有一个所有权
  • 当所有者(变量)离开作用域时,这个值被丢弃,内存被释放

# 2.2 堆(Heap)

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

# 2.1.1 移动

  • 在有一些编程语言,两个变量会指向同一块堆内存区域,但rust不会
  • Rust 在这里会直接让 name1 失效,避免两个指针指向同一块堆内存。因为 Rust 会自动释放内存,这样可以避免当两个变量超出作用域时,导致重复的内存释放问题。将 name1 赋值给 name2,这个操作叫做移动,name1 移动到了 name2,移动后,name1 自动失效
  • 克隆可以将堆上内存的变量赋值给另一个变量不触发移动

# 3.回收算法

# 3.1 所有权