我不知道缺少任何引用的对象实例是否最终会被自动销毁/替换为新对象被实例化的时间。
例如:
let foo = new Object();
foo = "foo"
由于创建的实例是否已经new Object()
销毁,因为不再有对其的引用了?
内存中的实例发生了什么?
会在执行新操作时说存储空间被替换new Object()
吗?
由于创建的实例是否已
new Object()
销毁,因为不再有对其的引用了?
可能,最终。这些细节不是您可以直接在代码中观察到的东西,¹不在JavaScript规范中。垃圾收集(回收不再由应用程序引用的内存)是JavaScript引擎的一个非常复杂的领域,编写和维护这些引擎的人们在努力使我们的代码运行时不断对其进行审查和改进。尽可能快。
内存中的所说实例发生了什么?
就您的代码而言,一旦您不再引用该实例,该实例就会消失。实际上,当/如果垃圾收集器决定需要这样做,实例曾经占用的内存可能会在以后的某个时间(可能要晚得多)回收(以供将来使用)。
当我们执行新的新Object()时,会说存储空间会被替换吗?
它根据JavaScript引擎(V8与SpiderMonkey与JavaScriptCore等)以及内存是否充足还是不足而有所不同。但是再说一遍:就您的代码而言,该实例在您不再引用它时就消失了。
重要的是,不要基于对垃圾收集方式的观察或假设而编写代码,这有几个原因,其中包括:不同的JavaScript引擎不同;它取决于引擎的特定版本;它取决于发生了什么。
¹我也许应该提到的JavaScript刚刚接到了几个新功能(他们将在ES2021规格):WeakRef
与FinalizationRegistry
这使它看起来就像你可以在你的代码中观察到的垃圾收集。但是这些功能是经过精心设计的,不会过多地揭示垃圾收集器的工作,从而避免人们根据看到的情况编写代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句