主要是采用引用计数法和可达性分析算法两种方式来实现。
引用计数法(Reference Counting)
每个对象维护一个引用计数器,当引用计数增加时,计数器加1,减少时,计数器减1。
当引用计数器为0时,说明该对象不再被引用,此时可以被回收。
这种方法实现起来比较简单而且实时性好,但是无法处理循环引用的问题。
可达性分析算法(Reachability Analysis)
这是Java中的垃圾回收主要采用的方法。
通过一组成为“GC Roots”的对象出发,遍历所有可达的对象,对于一切无法通过GC Roots到达的对象,均可视为垃圾。
这种方法可以解决循环引用的问题,但是需要消耗一定的资源进行标记。