「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
前言
引用计数算法作为垃圾收集器最早的算法,有其优势,也有其劣势,虽然现在的JVM都不再采用引用计数算法进行垃圾回收,但这种算法也并未被淘汰。
引用计数算法
引用计数算法的核心点主要是:通过设置引用计算器来维护当前对象的引用数,从而判断当前引用数是否为0,来决定是否垃圾对象,如果为0的情况下,启动GC来进行垃圾回收
这里我们引用到了:引用计数器;当然成也萧何,败也萧何;也因为这个的引用,引用计数算法和其他的GC算法上还是有一些差别的。
那么引用的数值什么时候发生变化呢?
当某一个对象的引用关系发生改变的时候,引用计数器就会自发的去修改一些值。
【Q】那什么样才算引用关系发生改变呢?
【A】很简单,就像一个引用空间,被一个对象A
引用之后,引用数就加一,被第二个对象B
引用之后就再次加一,如果A
此时不在引用,就减一,一旦引用数字为0 就立刻进行回收动作
说完这些之后,我们就利用代码来进行一些简单的例子讲解吧!
例子
function fn() {
const num1 = 1
const num2 = 2
}
fn()
代码中,当我们执行完毕fn
方法之后,就不能在访问到num1
和num2
了,这就是因为它们的引用计数 === 0,被回收了
简单总结
引用计数算法就是为每个对象去维护一个引用计数值来统计它被多少对象所使用
- 每当有一个新的引用指向该对象时,引用计数器就+1
- 每当指向该引用对象失效时该计数器就-1
当引用数量为0的时候,则说明对象没有被任何引用指向,可以认定是垃圾对象,那就立刻执行GC算法回收垃圾