引用计数垃圾收集算法
标记-清除(Mark-and-sweep)算法
该算法能够判断出某个对象是否可以访问,从而知道该对象是否有用,该算法由以下步骤组成:
垃圾收集器构建一个“根”列表,用于保存引用的全局变量。在JavaScript中,“window”对象是一个可作为根节点的全局变量。
然后,算法检查所有根及其子节点,并将它们标记为活动的(这意味着它们不是垃圾)。任何根不能到达的地方都将被标记为垃圾。
最后,垃圾收集器释放所有未标记为活动的内存块,并将该内存返回给操作系统。
这个算法比上一个算法要好,因为“一个对象没有被引用”就意味着这个对象无法访问。
截至2012年,所有现代浏览器都有标记-清除垃圾收集器。过去几年在JavaScript垃圾收集(分代/增量/并发/并行垃圾收集)领域所做的所有改进都是对该算法(标记-清除)的实现改进,而不是对垃圾收集算法本身的改进,也不是它决定对象是否可访问的目标。
网友评论