引用计数法
给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值减1;计数器为0的时候就回收。但是这种算法无法解决相互引用的问题,所以虚拟机并没有用它管理内存。
可达性分析算法
在java语言中,可作为GC Roots的对象包括一下几种
虚拟机栈(栈帧中的本地变量表)中引用的对象
法法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI(即一般说的Native方法)引用的对象
以GC Roots作为起始点,从这些节点开始向下搜索,搜索所有走过的路径成为引用链,当一个对象到GC Roots没有任何引用链经过(也就是从CG Roots到这个对象不可达)时,则证明此对象是不可用的。