避免使用终结方法
概述
终结方法通常是不可预测的,危险的。
原因
- 不能保证及时地被执行,因为JVM可能会延迟执行终结方法;
- 在不同的JVM上对于执行终结方法的实现,即垃圾回收算法的实现是不同的;
- 当一个程序终止时,某些已经无法访问对象上的终结方法可能根本没有执行;
- System.gc System.runFinalization这个两个方法并不能保证终结方法被执行;
- 如果未被捕获的异常在终结过程中被跑出来,那么异常可以被忽略,并且终结过程也会终止。这样的对象会处于破坏的状态;
- 最后,使用终结方法会有严重的性能损失;
如何使用终结方法
如果类中的资源确实需要终止,那么应该提供一个显式的终结方法,例如IO中的close方法;
好处
- 当对象的owner忘记使用显式的终止方法时,终结方法可以充当安全网,释放资源;