从一个对象变得不可到达,到它的终结方法被执行,所经历的时间是任意的。JVM会延迟执行终结方法。
终结方法的执行是垃圾回收算法的一个主要功能,不同JVM的实现大相径庭。
不应该使用终结方法来更新重要的持久状态。
终结方法会拉低性能。
提供显示的终止方法,如InputStream、OutputStream和java.sql.Connection的close方法。显示终止方法通常与try-finally结合使用。
终结方法的两种合法用途:
1.当对象所有者 忘记调用前面段落中建议的显示终止方法时,终结方法可以充当安全网。如果终结方法发现资源未被终止时,应在日志中记录一条警告,这表示客户端代码中的一个bug。
2.当本地对等体不具有关键资源时,可使用终结方法。当本地对等体具有关键资源时,应提供显示终止方法。(本地对等体是一个本地对象,普通对象通过本地方法委托给一个本地对象,其不同于普通对象,垃圾回收器不知道它。
注意:如果子类实现者覆盖了超类的终结方法,但是未手工调用超类的终结方法,那超类终结方法将永不被调用。因此,应记住调用super.finalizer。