前端系统化学习【JS篇】:(十二)内存优化之【浏览器的垃圾回收机制】

557 阅读2分钟

前言

  • 细阅此文章大概需要 2分钟\color{red}{2分钟}左右
  • 本篇中讲述了:
      1. 浏览器中栈内存的垃圾回收
      1. 浏览器中堆内存的垃圾回收
      1. 浏览器中常见的两种垃圾回收机制
      1. 内存优化
  • 如果有任何问题都可以留言给我,我看到了就会回复,如果我解决不了也可以一起探讨、学习。如果认为有任何错误都还请您不吝赐教,帮我指正,在下万分感谢。希望今后能和大家共同学习、进步。
  • 下一篇会尽快更新,已经写好的文章也会在今后随着理解加深或者加入一些图解而断断续续的进行修改。
  • 如果觉得这篇文章对您有帮助,还请点个赞支持一下,谢谢大家!
  • 欢迎转载,注明出处即可。

JS中的内存优化【浏览器的垃圾回收机制】

  • 【栈内存【执行环境栈ECstack】(存储的是执行上下文)】

    • 私有上下文:
      • 一般情况下,函数执行完成,所形成的私有上下文就会被出栈释放。
      • 特殊情况下,当前函数的私有上下文中的某些内容被上下文以外的事物占用了,此时就不能出栈释放该私有执行上下文 【闭包的保存机制】
    • 全局上下文:
      • 加载页面创建的,只有页面关闭时才会被释放掉

  • 【堆内存】

    • 引用数据类型的值被创建时就会开辟一块新的堆内存用来存储其数据。
      • 如函数执行时,会创建私有上下文并创建一个堆内存,用来存储代码字符串...
    • 【浏览器的垃圾回收机制】
      • 引用计数【以IE为主】
        • 堆内存被创建后,其中会进行计数的操作,当这个堆内存被外面引用一次,就会累加一次计数,而被移除一次引用就会被递减1,当计数为0时,浏览器会在空闲时将所有计数为0的堆内存都释放掉。
        • 【存在问题】: 在某些情况下会导致计数混乱,会造成内存不能被释放,最终导致内存泄漏
      • 检测引用(占用)【或称标记清除】(以谷歌chrome为主)
        • 浏览器在空闲时【指定时间】会一次检测所有堆内存,把没有被任何事物占用的堆内存释放掉
  • 优化

    • 【手动解除占用】
      • 若想要手动释放某个堆内存,则将指向堆内存地址指针的变量 手动赋值为null【空对象指针】