Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript违背承诺或对象何时被垃圾回收_Javascript_Google Chrome_Promise_Garbage Collection_Closures - Fatal编程技术网

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的接口。