JS的内存的生命周期:
1- JS运行程序 分配你所需要的暂时使用内存大小。
2- JS运行程序 在每次创建字符串、对象的时候,程序都会分配新内存来存储那个实体。
3- JS运行程序 对于不需要使用的内存将其释放。
垃圾回收机制所存在的意义
在不需要字符串、对象的时候,需要释放其所占用的内存,否则将会消耗完系统中所有可用的内存,造成系统崩溃
内存泄漏
由于疏忽或错误造成程序未能释放那些已经不再使用的内存,造成内存的浪费。
垃圾收集机制的原理
垃圾收集器会按照固定的时间间隔,周期性的找出不再继续使用的变量,然后释放其占用的内存。
不再使用的变量也就是生命周期结束的变量,是局部变量,局部变量只在函数的执行过程中存在,当函数运行结束,没有其他引用(闭包),那么该变量会被标记回收。
全局变量的生命周期直至浏览器卸载页面才会结束,也就是说全局变量不会被当成垃圾回收。
垃圾收集策略 (标记清除)
工作原理:
当变量进入环境时(例如在函数中声明一个变量),将这个变量标记为“进入环境”,当变量离开环境时,则将其标记为“离开环境”。标记“离开环境”的就回收内存。
工作流程:
1- 当变量进入环境时,垃圾收集器会在运行的时候会给存储在内存中的所有变量都加上标记。
2- 当变量离开环境时,垃圾收集器会去掉环境中的变量以及被环境中的变量引用的变量的标记。
3- 最后垃圾收集器会执行最后一步内存清除的工作,销毁那些带标记的值并回收它们所占用的内存空间。
如何避免内存泄漏:
1- 减少不必要的全局变量,使用严格模式避免意外创建全局变量。
2- 在你使用完数据后,及时解除引用(闭包中的变量,dom引用,定时器清除)。
3- 组织好你的逻辑,避免死循环等造成浏览器卡顿,崩溃的问题。