什么样的对象要回收?
当然是死掉的对象,那么,怎么判断是死掉的对象?有几种方法:
1.引用计数法
对象有一个引用计数器,保存指向它的引用。当计数器为0的时候,就没有引用指向它,那么就可以被回收。
弊端:AB互相持有对方的引用,那么AB永远不会被回收,造成内存空间的浪费。
2.可达性分析
GC Roots对象,从这些对象出发,向下搜索,走过的路径成为引用链,当一个对象到GC Roots没有任何引用链链接的时候,那么,这个对象就可以被回收。
GC Roots对象包括:
虚拟机栈中的对象
本地方法栈中的对象
方法区中常量引用的对象
方法区中静态变量引用的对象