内存管理

内存声明周期
  • 分配所需要的内存
    • js在定义变量时就完成了内存分配
    • 还会通过函数调用分配内存(看返回的时对象,元素还是字符串来决定)
  • 使用分配到的内存(读,写)
    • 使用值的过程实际上就是对分配内存进行读写的操作,可能是写入一个变量或者写入对象的属性值,甚至是传递参数的函数
  • 不需要时将内存释放/归还
    • js嵌入了垃圾处理器,找出哪些不再继续使用的变量,释放其占用的内存
    • 常用的两个垃圾回收算法——引用计数以及标记清除
      • 引用计数:跟踪记录每个值被引用的次数,把对象是否不再需要这个概念简单理解为,对象有没有其他对象引用它,发现一次引用+1,解除一次引用-1,直到监听到引用为0时认为可以被回收
      • 引用计数有个限制,无法处理循环引用,当两个对象呗循环调用时,引用计数会考虑到它们至少有一次引用,所以不会把他们进行回收,对DOM对象进行垃圾回收时就会容易出现这个问题导致DOM元素从DOM树上删除之后,其拥有的内存也没办法被释放
      • 标记清除:标记变量何时进入环境以及何时离开环境,把对象是否不再需要这个概念理解为对象是否可以获得
      • 算法假定设置一个root对象,垃圾回收器定期从root对象开始,找所有从根开始引用的对象然后找这些对象引用的对象,这样会找到所有可以获得的对象,收集所有不能获得的对象,把这些进行标记并清除
内存泄漏

当不再使用的内存没有被得到及时的释放,就会引发内存泄漏

常见的内存泄漏:闭包,意外的全局变量(let a=b=0),定时器没有清除id,脱离DOM的引用(就是楼上说的那个引用计数的限制)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值