如何判断java对象是否要被回收
1.引用计数法
给对象中添加一个引用计数器,每当有一个地方引用他,计数器就加一,当引用失效计数器就减一;计数器为0的对象就是不可能再被使用的。
好处:方法简答 高效;但是大多数虚拟机没有使用此种方式;
坏处:因为他很难解决对象之间互相引用的问题。
可达性分析算法
将GCROOTS对象作为起点,从这些节点开始向下搜索引用的对象,能找到的对象都标记为非垃圾对象,其余未标记的都是垃圾对象;
常见的引用类型
1.强引用:普通的变量引用
2.软引用:将对象使用SoftReference软引用类型的对象包起来,正常不会被垃圾收集器回收,但是如果做完gc后还没有足够的空间存放新的对象,就会把这些软引用的对象回收掉。
3.弱引用:gc的时候会直接回收掉
4.虚引用:最弱的一种引用关系,几乎用不到
方法区中类如何回收
满足以下条件:
1.该类所有的对象都被回收了
2.该类的加载器也被回收了
3.该类的Class对象没有被引用