javascript 内存管理和垃圾回收 (小白版)

110 阅读2分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

随着近些年硬件技术的不断发展,同时高级编程语言当中也都自带了gc机制,所以这样的一些变化,就让我们在不需要特别注意内存空间使用的情况下,也能够去正常的完成相应的功能开发。那么为什么在这里我们一定要去学习内存管理呢

内存管理介绍

  • 内存:由可读写单元组成,表示一片可操作空间
  • 管理:人为的去操作一片空间的申请、使用和释放
  • 内存管理:开发者主动申请空间、使用空间、释放空间
  • 管理流程:申请一使用一释放

javascript中的内存管理

在javascript 中使用内存空间同其他语言是一样的,分三步

  1. 申请内存空间
  2. 使用内存空间
  3. 释放内存空间

但是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 ,从根节点访问不到就变成了垃圾

image.png