javascript违背承诺或对象何时被垃圾回收
我正在测试javascript违背承诺或对象何时被垃圾回收,javascript,google-chrome,promise,garbage-collection,closures,Javascript,Google Chrome,Promise,Garbage Collection,Closures,我正在测试承诺和垃圾收集,根据这一点,下面代码中显示的承诺应该得到垃圾收集。我使用了一个WeakMap进行检查,因为它不应该干扰GC var-map=new-WeakMap(); set(新承诺(函数(){}),“test”); 函数doCheck(){ 控制台日志(map); }大多数Javascript引擎使用标记和扫描算法来检查对象是否需要垃圾收集 该算法假设一组称为根的对象的知识 (在JavaScript中,根是全局对象)。周期性地 垃圾收集器将从这些根开始,查找所有 从这些根引用,然
承诺
和垃圾收集
,根据这一点,下面代码中显示的承诺
应该得到垃圾收集
。我使用了一个WeakMap
进行检查,因为它不应该干扰GC
var-map=new-WeakMap();
set(新承诺(函数(){}),“test”);
函数doCheck(){
控制台日志(map);
}
大多数Javascript引擎使用标记和扫描算法来检查对象是否需要垃圾收集
该算法假设一组称为根的对象的知识
(在JavaScript中,根是全局对象)。周期性地
垃圾收集器将从这些根开始,查找所有
从这些根引用,然后从
从根开始,垃圾收集器将
查找所有可访问对象并收集所有不可访问对象
此外,map对象保存对对象的引用。并且没有其他引用promise对象,JS引擎应该在下一个垃圾收集周期中清除promise对象
当我第一次调用doCheck()时,map引用了promise。但当我第二次调用时,它是空的
您的答案是我在运行代码时所期望的结果,但是promise引用从未得到GC'ed。当我第一次调用doCheck()时,map具有对promise的引用。但当我第二次调用时,它是空的。@我在一个
about:blank
chrome窗口控制台上也这样做了。它从未被删除。附上工作场景的屏幕截图。对我来说,有时也不清楚参考资料。我认为这取决于垃圾收集周期。没有任何东西会引用promise对象,因此可以立即收集它。但这并不意味着垃圾收集器将立即运行并实际收集垃圾。也许您可以使用标志启动JS环境,以便它公开一个强制GC的接口。