7.2.2垃圾收集和对象的终结

7.2.2垃圾收集和对象的终结

前面的章节中曾讲过,Java虚拟机实现必须具有某种自动堆存储管理策略一大部分是采用 垃圾收集器,本章前面也讲过,程序可以明确或者隐含地为对象分配内存,但是不能明确地释 放内存。但一个对象不再为程序所引用了,虚拟机必须回收(垃圾收集)那部分内存。实现可 以决定何时应垃圾收集不再被引用的对象——或者决定是否裉本不收集它们。并没有要求Java虚 拟机实现一定要释放不再被引用的对象所占据的内存。

如果类声明了一个名为finalize ()的返回void的方法,垃圾收集器会在释放这个实例所占据 的内存空间之前执行这个方法(被称为终结方法)一次。下面是一个声明了终结方法的类的例子:

//On CO-ROM in file classlife/ex7/Finale.java
class Finale {

protected void finalize() {

System.out.printIn("A Finale object was finalized.");
}
}

因为一个终结方法是一个普通的Java方法,它可以直接被程序所调月。这样的直接调用不会 影响垃圾收集器的自动调用过程。垃圾收集器(最多)只会调用一个对象的终结方法一次一在 对象变成不再被引用的之后的某个时候,在占据的对象被重用之前。如果终结方法代码执行后, 对象重新被引用了(复活了),随后再次变得不被引用,垃圾收集器不会第二次调用终结方法。

垃圾收集器自动调用的finalize ()方法抛出的任何异常都将被忽略。垃圾收集器可以用任意 顺序调用finalize ()方法,使用任意线程,甚至并行使用多线程。第9章将描述终结过程的细节。

猜你喜欢

转载自www.cnblogs.com/mongotea/p/11979550.html