当声明一个变量,对象,数组或者函数时,所有的这些内容都存在内存中的某一个位置
当执行结束后该位置数据就是需要清除的垃圾 释放内存
JS 不需要我们自己去分配内存 内存分配和释放是自动发生的
释放内存是垃圾回收的一个过程,通过垃圾收集器来完成操作
JavaScript是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。 释放的过程称为垃圾回收
垃圾回收过程也被称为为自动内存管理
javacript中内存分配是自动完成的,只要引用存在,就不会被任何清理或垃圾回收,如果某个位置无法访问则该位置将被作为垃圾回收,内存被释放
JS常用垃圾回收算法叫标记清除mark-and-sweep 该算法从跟对象开始检查链接的引用
如果算法找到无法访问的位置时 那就意味着这些事要删除的地方
内存泄漏内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
常见的集中情况:
定时器:定时器没有销毁的情况下,不断生成新变量或增大某个变量。
全局变量:大部分时候我们可能是需要使用全局变量才主动定义,但是如果你无意中定义了一个全局变量,那么它将不会被回收,而会一直存留。
闭包:一般来说,我们使用闭包就是在利用它不会被垃圾回收清理的特性进行一些操作,但是如果无意中定义了闭包可能就会导致内存泄漏。
循环引用:由于垃圾收集器是检测对象有无被其他对象引用再进行删除,如果两个对象相互引用,引用计数算法考虑到它们互相都有至少一次引用,所以它们不会被回收