前端进阶(第一期)-调用堆栈笔记
栏目: JavaScript · 发布时间: 5年前
内容简介:在JavaScript中,最常用的是通过JavaScript的内存管理机制是:内存基元在变量(对象,字符串等等)创建时分配,然后在他们不再被使用时“自动”释放。后者被称为垃圾回收。
var a = 20; var b = 'abc'; var c = true; var d = { m: 20 } 复制代码
值类型数据和引用数据类型的复制
- 值类型数据是值的复制,开辟新的存储空间来存储值,复制前后的数据之间无联系。
- 引用类型数据仅仅是地址的复制,开辟新的存储空间来存储地址指针,复制前后的地址指针指向堆中同一个值。
内存空间管理
在JavaScript中,最常用的是通过 标记清除 的算法来找到哪些对象是不再继续使用的, a=null 是一个释放引用的操作,脱离执行环境,这个值会在下一次垃圾收集器执行操作时被找到并释放。
1-4 JavaScript深入之带你走进内存机制
JavaScript的内存管理机制是:内存基元在变量(对象,字符串等等)创建时分配,然后在他们不再被使用时“自动”释放。后者被称为垃圾回收。
知识点有:
- 内存模型
- 内存的生命周期
- 内存回收算法
- 内存泄漏
内存模型
JS内存空间分为 栈(stack) 、 堆(heap) 、 池(一般也会归类为栈中) 。 其中栈存放变量,堆存放复杂对象,池存放常量。
内存的生命周期
内存分配 --- 内存使用 --- 内存回收
内存回收算法
- 引用计数算法
存在一个致命的问题:循环引用。如果两个对象相互引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄露。
- 标记清除算法
标记清除算法将“不再使用的对象”定义为“无法达到的对象”。从根部(在JS中就是全局对象)出发定时扫描内存中的对象,凡是能从根部到达的对象,都是还需要使用的。那些无法由根部出发触及到的对象被标记为不再使用,稍后进行回收。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。