静态变量也可以看做是一种GC Roots ,此时只要一个对象被GC Roots引用了,就不会回收他
java中不同的引用类型?
强引用:一个变量引用一个对象,只要是强引用的类型,那么垃圾回收的时候绝对不会去回收这个对象
软引用:被SoftReference软引用类型的对象包裹起来的实例对象,此时变量对对象的引用就是软引用,正常情况下垃圾回收是不会回收软引用对象的,但是如果进行垃圾回收之后,发现内存空间还是不够存放新的对象,内存都快溢出了,此时就会把软引用的对象给回收掉,哪怕他被变量引用了。
弱引用:被WeakReference包裹的实例对象,如果发生垃圾回收,就会把这个对象给回收掉。
虚引用:PhantomReference
finalize()方法的作用:到了回收的阶段,假设没有GC Roots引用的对象,是一定立马被回收吗?还有一个finalize()方法可以拯救他自己
回收之前会调用finalize()方法,如果把自己这个实例对象重新赋值给某个GC Roots变量,重新引用了自己,就不会被垃圾回收。
意义不大,基本不会用,他能做的try{}catch(){}都能做