避免使用终结方法

避免使用终结方法

概述

终结方法通常是不可预测的,危险的。

原因

  • 不能保证及时地被执行,因为JVM可能会延迟执行终结方法;
  • 在不同的JVM上对于执行终结方法的实现,即垃圾回收算法的实现是不同的;
  • 当一个程序终止时,某些已经无法访问对象上的终结方法可能根本没有执行;
  • System.gc System.runFinalization这个两个方法并不能保证终结方法被执行;
  • 如果未被捕获的异常在终结过程中被跑出来,那么异常可以被忽略,并且终结过程也会终止。这样的对象会处于破坏的状态;
  • 最后,使用终结方法会有严重的性能损失;

如何使用终结方法

如果类中的资源确实需要终止,那么应该提供一个显式的终结方法,例如IO中的close方法;

好处

  • 当对象的owner忘记使用显式的终止方法时,终结方法可以充当安全网,释放资源;