Dud*_*ock 5 javascript garbage-collection linked-list nodes
我为javascript写了一个快速而又脏的双链表实现.我希望能够一次删除多个(连续)节点,并且想知道:仅仅切断我要移除的这些最外层节点的末端,还是我必须单独删除每个节点.如果我正确地理解了javascript的垃圾收集,一旦没有任何东西指向那些连续的节点,即使它们仍然相互连接,它们应该由垃圾收集器处理,这是正确的吗?如果有人能告诉我自己如何测试或验证这一点,我也非常感谢.
据MDN称:
截至2012年,所有现代浏览器都提供了标记 - 清除垃圾收集器.在过去几年中,在JavaScript垃圾收集(生成/增量/并发/并行垃圾收集)领域所做的所有改进都是对该算法的实现改进,但不是对垃圾收集算法本身的改进,也没有减少对时间的定义. "不再需要一个物体"
标记和扫描算法从根对象开始,找到所有可到达的对象,然后收集所有不可到达的对象,因此对于这些浏览器,切断节点将没有问题.较旧的浏览器使用引用计数,这意味着只有在对它们有0引用时才收集对象,因此在这种情况下,双向链表的循环将是有问题的.然后,您需要以某种方式切断连续节点中的循环(将引用设置为null,删除关键字,依此类推).
因此,如果您正在为模式浏览器开发,那么一切都很好,但如果您希望与IE6/7等浏览器兼容,那么您需要一个稍微复杂一点的解决方案(它始终是这样,不是吗......)