一、垃圾回收机制存在的原因
1.解释器:
javascript代码由解释器执行,解释器包含在浏览器中。
2.内存泄露:
由于某些原因导致已分配的内存未释放或无法释放,造成内存浪费,运行速度降低,甚至系统崩溃。
3.内存的分配:
当定义一个变量的时候,解释器会自动为该变量分配存储单元,但是如果只分配不释放,当越来越多的变量被定义时,会造成内存泄漏。所以JavaScript的解释器需要自动释放内存,防止内存泄露。
二、垃圾回收方式
1.标记清除法
(1)标记阶段:当变量进入环境时,就给变量做进入标记;如:“它进入了环境哦”。
(2)清除阶段:当变量离开环境时,就给变量做清除标记;如:“它离开了环境哦” ;当变量被标记了“离开”时,就说明无法访问该变量了,因此就可以将其所占的空间收回来。
2.引用计数法:
跟踪记录每个值的被引用的次数。声明一个变量并将一个引用类型赋值给该变量,这个值的被引用数就加1;相反,如果引用该值的变量转而去引用其他值,那么该值的被引用次数将会减1。如果该值的被引用次数为0,就说明无法访问该值了,因此就可以将其所占的空间收回来。