任何Java类都可以覆盖Object类的finalize方法,在该方法中清理该对象占用的资源,如果程序终止之前始终没有进行垃圾回收,则不会调用失去引用对象的finalize方法。只有当程序需要更多额外内存时,垃圾回收机制才会进行垃圾回收。但是:某个失去引用对象只占用了少量的内存,而且系统没有产生严重的内存需要,那么该对象的finalize方法不会得到调用。
特点1,永远不要主动调用某个对象的finalize方法,该方法应该交给垃圾回收机制调用。
2,finalize方法何时被调用是否被调用是不确定的,不要把finalize方法当作一定会执行的方法。
3,由于finalize方法不一定会被执行,如果想保住某个类里打开的资源被清理什么的,不要放在finalize方法中进行清理。
4,执行finalize方法出现异常时,垃圾回收机制不会报告异常,程序继续执行。 |