前端基础进阶(一):内存空间详细图解
地址:https://www.jianshu.com/p/996671d4dcc4
一、3种数据结构
- 栈
先进后出、后进先出,像乒乓球盒子;
应用场景:函数调用栈(即执行上下文) - 堆
key-value,树状结构,无关顺序,像书架,知道书名可以找到书的位置;
应用场景:JSON格式的数据 - 队列
先进先出、后进后出,像排队;
应用场景:事件队列
二、对象变量及数据类型
- 变量对象:执行上下文生成后,会创建一个叫变量对象的特殊变量;
- 5中基础数据类型:Undefined、Null、Number、Bool、String(不包括ES6的Symbol),按值访问,保存在变量中的是真实的值
-
引用数据类型:按引用访问;引用数据类型的值是保存在堆内存中的对象;在操作对象时,实际上是在操作对象的引用而不是实际的对象;该引用为保存在变量对象中的一个地址,该地址与堆内存的实际值相关联
变量对象与堆内存.png
三、内存空间管理
- 自动垃圾收集机制:垃圾收集器会每隔固定的时间段就执行一次释放操作;最常用的是通过标记清除的算法来找到哪些对象是不再继续使用的,因此a = null其实仅仅只是做了一个释放引用的操作,让 a 原本对应的值失去引用,脱离执行环境,这个值会在下一次垃圾收集器执行操作时被找到并释放。而在适当的时候解除引用,是为页面获得更好性能的一个重要方式。
- 局部函数运行完后,内部变量容易回收;全局变量什么时候需要自动释放内存空间则很难判断,因此在我们的开发中,需要尽量避免使用全局变量
网友评论