马老师互联网三高项目解决方案 马老师亿级流量多级缓存专题课程(2022版)
16.GC如何判断对象可以被回收
在 Java 中,垃圾收集器(Garbage Collector)主要通过两种方式来判断对象是否可以被回收:
1.引用计数法:每个对象有一个引用计数器,当有一个新的引用指向这个对象时,计数器加 1,当引用失效时,计数器减 1。当计数器的值为 0 时,说明该对象不再被引用,可以被回收。但是,这种方式无法解决循环引用的问题,即 A 对象引用了 B 对象,B 对象也引用了 A 对象,导致计数器始终不为 0,无法回收这些对象。
2.可达性分析法:这是目前主流的垃圾收集算法。该算法的基本思想是,通过一系列称为 GC Roots 的根对象作为起点,遍历整个对象图,将所有与 GC Roots 不可达的对象标记为不可用对象,最后回收这些不可用对象。在 Java 中,GC Roots 主要包括以下几种:
..虚拟机栈(栈帧中的本地变量表)中引用的对象。