JS垃圾回收机制的一些笔记

垃圾回收器会定期(周期性)找出不再继续使用的变量,然后释放其内存,各个浏览器的周期不同,常用的垃圾回收机制有这两种。
 
标记清除(常规)
    浏览器将所有引用变量加上标记,然后将全局引用的变量以及闭包的标记清除。在执行js代码的时候会进入一个执行环境,当离开当前执行环境时,当前执行环境内标记的变量会被清除,大多数浏览器都是使用这种方式。
引用计数(IE7/8,Netscape Navigator3)
    每次引用一个变量,都会在引用计数中+1,如果这个值赋给另一个引用,那么再+1,相反,如果当引用这个值的变量引用了其他的变量,那么就会-1,当引用数量为0时,会被垃圾回收器清除。
 
引用计数的问题——>(循环引用)
    (IE中有一部分不是使用的原生的js对象,使用的是C++模拟的COM对象来模拟,它的垃圾回收机制是使用的引用计数,当产生引用循环时,就会大大占用内存。)
解决办法——>手动解除引用循环
    在使用完之后手动将其设置为null,将变量设置为null意味着切断变量与它此前引用的值的联系,当垃圾回收器下次运行,就会删除这些值并回收它们占用的内存

猜你喜欢

转载自www.cnblogs.com/asablog/p/11608082.html