当垃圾收集器检测到此实例不再可访问时调用。默认实现不执行任何操作,但可以重写此方法以释放资源。
请注意,覆盖最后确定
明显比对象。终结器可能会在对象不再存在后运行很长一段时间可访问,这取决于内存压力,因此依靠它们进行清理是个坏主意。还要注意,终结器在单个VM范围的终结器线程上运行,因此,在终结器中执行阻塞工作是一个坏主意。通常只需要终结器对于具有本机对等点并且需要调用本机方法来销毁该对等点的类。即使如此,最好提供一个明确的关闭
方法(和实现可关闭
),并坚持要求调用方手动处置实例。这个适用于类似文件的东西,但对于类似大整数
其中典型的调用代码将不得不处理大量临时代码。不幸的是,从以下观点来看,创建大量临时代码的代码是最糟糕的代码类型单个终结器线程。
如果你必须使用终结器,至少考虑提供您自己的终结器引用队列
并拥有自己的线程处理该队列。
与构造函数不同,终结器不会自动链接。你有责任打电话super.finalize()
你自己。
终结器抛出的未捕获异常将被忽略,并且不会终止终结器线程。请参见通用程序设计第7项,“避免终结器”了解更多信息。