1.垃圾回收机制只负责回收堆内存中的对象。
2.垃圾回收机制回收任何对象之前,总会调用它的finalize方法,该方法可能使该对象复活,从而使垃圾回收机制取消回收。
3.对象在堆内存中有三种状态:
激活状态:即有一个或以上引用变量引用该对象
去活状态:即没有任何引用变量引用该对象,这时垃圾回收机制准备回收该对象所占有的内存,回收之前,会调用对象的finalize方法,如果方法中让一个变量重新引用该对象,则这个对象再次变为激活状态,否则该对象进入死亡状态。
死亡状态:如果对象的finalize方法已被调用,且仍没有变成激活状态,那么该对象将永久失去引用,从而变为死亡状态。垃圾回收机制才会在这时真正的回收该对象所占有的资源。
如图:
4.强制垃圾回收:
强制通知系统进行垃圾回收,但系统是否回收依然不确定。
强制垃圾回收两个方法:
1).System.gc();
2).Runtime.getRuntime.gc();
5.不要主动调用某个对象的finalize方法,可以通过如下两个方法强制垃圾回收机制调用去活对象的finalize方法:
1).System.runFinalization();
2).Runtime.getRuntime.runFinalization();