程序之路

JavaScript垃圾回收机制的了解

2021-03-18  本文已影响0人  转移到CSDN名字丹丹的小跟班

对于js种的任意长度字符串,对象,数组是没有固定大小的,只有在分配存储时,解释器就会分配内存来存储这些数据。当js的解释器消耗完系统所有可用内存时,就会造成系统崩溃。因此js有着自己的一套垃圾回收机制。(全局变量不会被回收)
常用有两种方法:标记清除和引用计数

标记清楚
当对象进入执行环境时,垃圾回收就会将其标记为\color{#DAA520}{\small进入环境},当变量离开会标记为\color{#DAA520}{\small离开环境},然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。

引用计数
另一种不太常见的垃圾收集策略叫做引用计数(reference counting)。引用计数的含义是跟踪记录每个值被引用的次数。
当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是为1。如果同一个值又被赋值给另一个值,就继续+1,而当变量被复制其他值时,就-1,当这个值的引用次数变成 0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾收集器下次再运行时,它就会释放那 些引用次数为零的值所占用的内存。

但是引用计数存在如果相互引用大量的存在会导致大量的内存泄漏;同时如果出现循环引用问题也会导致内存泄漏的问题。

上一篇下一篇

猜你喜欢

热点阅读