内存的生命周期
-
分配需要的内存空间
-
使用分配的内存
-
不需要时释放内存
内存空间的类型
-
栈
-
-
存放变量
-
-
基本类型数据(Number,boolean,null,Undefined,String,Symbol)
-
指向复杂数据类型的引用指针
-
-
特性
-
-
先进后出
-
-
基本类型的变量名与值都存放在栈中,当我门修改值时会覆盖原有值
-
-
-
堆
-
-
存放复杂数据类型
-
特性
-
-
无序的树状结构
-
满足key-value键值对的存储方式,当我们知道key名,就能通过key名找到对应的value值
-
key名及引用地址存储在栈中,所以当我们复制key名时只是复制了引用指针,指向的value还是tong yi feng
-
-
-
池(常量池)
-
-
存放常量
-
-
队列(任务队列)
-
-
特性
-
-
先进先出
-
-
垃圾回收机制
函数中的局部变量:在函数执行完后就不再需要就会释放,
全局变量:垃圾回收器很难判断
-
引用计数
-
-
看一份数据是否还有指向他的引用
-
-
标记清除
-
-
从根部出发,看是否能达到某个变量,如果达到及还被需要,否则清除
-
-
垃圾回收器创建roots,roots通常时代吗中保留使用的全局变量,js中,一般认定window为root,也就是所谓的根部
-
从根部出发验证所有的roots,所有的子元素也会被递归检查,进行标记
-
然后未被标记的将会被垃圾回收器释放
-
-
可能造成内存泄漏
-
全局变量
-
遗忘的定时器
-
闭包
-
DOM的引用