类加载过程总结
对象是否可回收判断方式
引用计数法
对象每被引用一次,其引用计数就+1,不再引用时就-1,这样虽然简单高效,但是无法解决互相引用的问题,比如A持有B,B持有A A a=new A(); B b =new B(); a.instance=b; b.instance=a; a=null;b=null; 这样引用计数都不为0,也就无法回收
可达性分析
确定一批GC Roots引用,然后以这些引用为出发点一级级的查找可以引用到的对象,但凡不能被引用到的对象,就属于废对象,搜索经过的路径称为引用链
通过根搜索算法找到的对象一定是后续有用/不可回收的对象吗?
答: 不一定。其实根本无法知晓某个对象是不是后面有用, 最多只能知道现在是不是相互依赖, 这里的区别在于, 虽然对象之间是依赖的, 但是很可能在逻辑上后续的所有流程都不会再调用这个依赖关系. 这点区别会导致另一种形式的"