申明:本文是js系列笔记之一,有不正确的地方请尽管指出,大家相互学习,共同进步;
js的 垃圾回收机制,常用的有两种方法:标记清除,引用计数;
标记清除:当变量进入环境时标记为“进入环境”,当变量离开环境时标记为“离开环境”;然后垃圾收集器会定时去清除,销毁被标记为离开环境的变量,释放其内存;
引用计数:
跟踪记录每一个引用的值被引用的次数。即变量每被引用一次,引用计数加1,相反当包含这个值的 引用变量又取得了另外一个值(另外一个值赋给了引用这个值的变量),引用计数减1;当引用计数变为0时,则说明没有值引用这个值了,此时(你已经猜到了)这个变量就可以被垃圾回收机制回收了,(因为没有在被引用了);
内存泄漏:
最常见的循环引用
相互引用计数永远不可能为0,所以两个变量内存永远都不会被释放,如果程序执行多次,这样的变量越来越多;浏览器越来越卡,终究会奔溃;
内存管理:
js的垃圾收集机制,让我们开发人员无需担心内存管理的问题,但是内存终究有限;所以建议:在开发中,确保一些内存占用非常大的变量不在使用时,我们可以主动:变量 = null;当然,你不这样做也是可以的,只是会对内存造成浪费,对浏览器的性能造成一定的影响;
性能问题:
ie6及之前在运行垃圾收集机制时会以以下几个临界值作为条件:达256个变量,4096个对象或者数组元素,或者64kb的字符串(JavaScript高级编程),达到任何一个临界值,垃圾收集器就会运行;问题在于:可能某个执行脚本中一直存在那么多的变量,那么垃圾收器会频繁的运行,这对性能本来就是一种不良行为,导致性能问题严重;所以决定一个浏览器性能与其垃圾收集机制息息相关,另外需要注意,垃圾收集机制是周期性运行的;
作者:XBGG
链接:https://www.jianshu.com/p/14d9c7a3eb3f