js 垃圾收集 标记清除过程

原文:垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记(当然,可以使用任何标记方式)。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。

根本理解不了这段话的逻辑,“在此之后再被加上标记的变量将被视为准备删除的变量”,如果从根结点开始,那它的子节点再访问父属性加上了标记,明明可以访问到怎么说无法访问阿?而且遍历作用域链的话每个节点都会清除标记阿,为什么会再加上标记?求形象解释一下这个过程

阅读 4.7k
2 个回答

垃圾收集器中有俩次判断变量是否要被收集。如果这俩次没逃脱掉,那就肯定要被收集的。
一是变量未被引用,二是已经执行过finalize方法。。。
也就是俩次标记,具体可以查下Jvm垃圾收集算法。

引用还在不会清除标记

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题