内存为什么需要管理
程序运行需要内存,如果不再使用的内存,没有及时释放,就会导致内存泄漏。
function fn() {
let arrList = []
arrList[100000] = 'wang is a coder'
}
fn()

内存管理介绍
内存生命周期:分配内存——>使用内存——>释放内存
- 内存:由可读写单元组成,表示一片可操作空间
- 管理:人为操作一片空间的申请、使用和释放
- 内存管理:开发者主动申请空间、使用空间、释放空间
- 管理流程:申请——使用——释放
JavaScript内存管理
内存管理流程
// 内存分配:声明变量、函数时自动分配
let obj = {}
// 内存使用
obj.name = 'wang'
// 内存释放:使用完毕,由垃圾回收机制自动回收
obj = null
JavaScript不像C这样的底层语言,有分配和释放内存的API,存在自动垃圾回收机制,由此大多数开发者不关心内存管理,在一定情况下会导致内存泄漏
- JavaScript中的内存管理是自动的
- 对象不再被引用时是垃圾
- 对象不能从根上访问到时是垃圾
可达对象
-
可以访问到的对象就是可达对象(通过引用、作用域链)
-
可达的标准就是从根上出发能否被找到
-
JavaScript中的根就是全局变量对象Window
function objGroup(obj1, obj2) { obj1.next = obj2 obj2.prev = obj1 return { o1: obj1, o2: obj2, } } let obj = objGroup({ name: 'obj1' }, { name: 'obj2' }) console.log(obj)
图示:
image-20210113083127333.png
如果此时删掉o2对o1的引用obj2.prev = obj1,并且删除obj对象对o1的引用后,此时o1就是不可达对象,会被作为垃圾回收

网友评论