1、引用计数算法
对象中添加一个引用计数器,每有地方引用它,计数器的值加1,若引用失效,则计数器的值减1,任何时刻计数器为0的对象就是不再被使用的对象。
优点:实现简单,判定效率高。
缺点:很难解决对象之间相互循环引用的问题。
2、可达性分析算法
以一系列称为GC Roots的对象(java栈中引用的对象、方法区中类静态属性和常量引用的对象、本地方法栈中引用的对象)作为起点向下搜索,走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(即从GC Roots到这个对象不可达),说明此对象是不可用的。