怎么确定是垃圾
引用计数法
给每个对象添加一个引用计数器,每当有一个地方引用它时,引用计数值就+1,当引用失效时,引用计数值就-1,任何时刻引用计数值为0的对象就可以被回收,当一个对象被垃圾收集器收集时,被它引用的对象引用计数值就-1,所以在这种方法中一个对象被垃圾收集会导致后续其他对象的垃圾收集行动。
优点:简单、高效;
缺点:当两个对象相互引用的时候就无法回收,导致内存泄漏。
Root Searching (可达性分析法)
为了解决对象间相互引用问题,Java 采用了可达性分析法,基本实现思路为:通过一系列 “GC Roots” 对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到 “GC Roots” 没有任何引用链相连时,则称该对象是不可达的,此时,该对象还处于缓刑阶段,要真正宣判一个对象为可回收对象,至少要经历两次标记过程。
JVM 采用的就是该方法