内存管理
内存:由可读写单元组成,表示一片可操作的空间
管理:认为的操作一片空间的申请使用和释放
内存管理:开发者主动申请空间,使用空间释放空间
管理流程:申请——使用——释放
let obj={}//申请
obj.name='lg'//使用
obj=null//释放
垃圾回收与常见GC算法
- javascript中的内存管理是自动的
- 对象不再被引用时是垃圾
- 对象不能从根上访问到时是垃圾
javascript中的可达对象
- 可以访问到的对象就是可达对象(引用、作用域链)
- 可达的标准就是从根出发是否能被找到
- javascript中的根就可以理解为全局变量对象
let obj={name:'xm'}
let ali=obj
obj=null
function objGroup(obj1,obj2){
obj1.next=obj2
obj2.prev=obj1
return {
o1:obj1,
o2:obj2
}
}
let obj=objGroup({name:'obj1'},{name:'obj2'})
cosole.log(obj)
image.png
GC算法
- GC就是垃圾回收机制的简写
- GC可以找到内存中的垃圾、并释放和回收空间
- 算法就是工作时查找和回收所遵循的规则
程序中不再需要使用的对象
程序中
常见GC算法
引用计数
- 核心思想:设置引用数,判断当前引用数是否为0
- 引用计数器
- 引用关系改变时修改引用数字
- 引用数字为0时立即回收
优点
- 发现垃圾立即回收
- 最大限度减少程序暂停
缺点
- 无法回收循环引用的对象
- 时间开销大
标记清除
- 核心思想:分标记和清除两个阶段
- 遍历所有的对象找标记活动对象
- 遍历所有对象清除没有标记的对象
- 回收相应的空间
网友评论