【发布时间】:2019-09-20 08:41:25
【问题描述】:
所以我一直在研究更高级的 javascript 部分。现在我正在学习内存、内存泄漏和垃圾收集。网络上的许多示例只是解释了垃圾收集器是什么,但我很难找到一个告诉我代码何时被视为垃圾收集器的垃圾。
到目前为止,我已阅读“当不再有指向对象的引用时”。这是唯一的情况吗?它们到底是什么意思。
提前致谢。
【问题讨论】:
标签: javascript memory
所以我一直在研究更高级的 javascript 部分。现在我正在学习内存、内存泄漏和垃圾收集。网络上的许多示例只是解释了垃圾收集器是什么,但我很难找到一个告诉我代码何时被视为垃圾收集器的垃圾。
到目前为止,我已阅读“当不再有指向对象的引用时”。这是唯一的情况吗?它们到底是什么意思。
提前致谢。
【问题讨论】:
标签: javascript memory
最好将其视为可从根访问或不可访问的代码,而根是本质上始终可访问的值,例如全局变量。 JS 中的垃圾收集器使用“标记和清除”算法,它从根开始并访问每个引用及其引用等。一旦被访问,它就会被标记为已访问/可访问以及从那里所有可访问的引用,并且不会再次被访问。
你可以有指向对象的引用,这些对象也可能有对其他对象的引用,但是一旦它们再也无法从根中到达,它们就会形成一种无法到达的引用岛。它们永远不会被访问,最终会被垃圾收集器扫除。
还进行了多项优化。例如,一些对象被创建并完成它们的工作一次然后就消失了。那些新的被清理得非常积极和快速。如果它们被长时间使用,它们将被认为是旧的,并且会减少访问以检查它们是否应该被垃圾收集。
【讨论】: