垃圾回收什么是
没有被引用的对象或变量
无法访问到的对象(几个对象引用形成一个环,互相引用)
js垃圾回收的两种机制
标记清除
引用计数
垃圾回收机制:
执行环境负责管理代码执行过程中使用的内存。JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,没有被释放,导致该内存无法被使用,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。
数组是引用类型的对象,无法直接保存在变量本地的数据类型。因为变量只允许保存一个值,而引用类型往往保存多个值。会在window对象之外,创建一个独立的空间,产生一个唯一的地址。变量中依然保存的是一个值,只是数组中仅保存了地址。
垃圾回收器
1、记录每个对象被几个变量引用者,每过一个引用,记数+1。当一个变量的赋值成null时,表示不在引用对象,记数-1。
2、回收不再被任何变量引用的对象时,记数为0,对象被回收。注意:使用完一个较大的对象后,主动赋null值,清空对象
回收的执行周期
对象起初会被分配在新生区(通常很小,只有1-8 MB,具体根据行为来进行启发)。在新生区的内存分配非常容易:我们只需保有一个指向内存区的指针,不断根据新对象的大小对其进行递增即可。当该指针达到了新生区的末尾,就会有一次清理(小周期),清理掉新生区中不活跃的死对象。
对于活跃超过2个小周期的对象,则需将其移动至老生区。老生区在标记-清除或标记-紧缩(大周期)的过程中进行回收。大周期进行的并不频繁。一次大周期通常是在移动足够多的对象至老生区后才会发生。至于足够多到底是多少,则根据老生区自身的大小和程序的动向来定。
内存溢出
内存溢出是一种程序运行的错误。指的是当程序运行需要的内存超过了剩余内存的时候,就会抛出内存溢出的错误,内存泄漏积累过多时,就会导致内存溢出