「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
随着近些年硬件技术的不断发展,同时高级编程语言当中也都自带了gc机制,所以这样的一些变化,就让我们在不需要特别注意内存空间使用的情况下,也能够去正常的完成相应的功能开发。那么为什么在这里我们一定要去学习内存管理呢
内存管理介绍
- 内存:由可读写单元组成,表示一片可操作空间
- 管理:人为的去操作一片空间的申请、使用和释放
- 内存管理:开发者主动申请空间、使用空间、释放空间
- 管理流程:申请一使用一释放
javascript中的内存管理
在javascript 中使用内存空间同其他语言是一样的,分三步
- 申请内存空间
- 使用内存空间
- 释放内存空间
但是js中没有提供相关的api,不能直接调用api,管理内存空间 通过一个脚本来模拟一下具体的操作 ,感受一下js的内存生命周期是什么样的
let obj = {} // 开辟空间
obj.name ='ll' //使用
obj=null //置空释放
js中的垃圾
常规的有两种
- 对象不再被使用时候
- 对象不能从根上访问 在gc上会使用到
可达对象
- 可以访问到的对象(引用,作用域链)
- 从根上出发是否能被找到
- js中的根可以理解为全局变量对象
js中的引用与可达
let obj = {name:'huluwa'} // 创建一个对象给obj,把引用给obj
let ali = obj //ali 这也指向了这个引用
obj = null // obg置为null ,此时 {name:'huluwa'} 还是可达对象,因为ali 还在指向这个引用
function objGroup(obj1,obj2){
obj1.next = obj2
obj2.prev = obj1
return {
o1:obj1,
o2:obj2,
}
}
let obj = objGroup({name:'1'},{name:'2'}) //等到下面可视图 如果切断o1的红色指向和自身的next ,从根节点访问不到就变成了垃圾