《Effective Java》第7条避免使用终结方法

        终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下,是不必要的.使用终结方法会导致行为不稳定,降低性能以及可移植性问题.终结方法有可取之处,但根据经验应该避免使用终结方法.

   一. 终结方法的缺点

          1. 终结方法并不保证会被及时的执行.从一个对象到变得不可到达开始到终结方法被执行的时间是任意长的.

          2. 及时地执行终结方法是垃圾回收算法的一个主要的功能,这种算法在不同的JVM中的实现方式是截然不同的,一个程序在测试环境中表现正常,但是在生产环境就可能有问题.

         3. Java语言规范中不仅不保证终结方法会被及时的执行,而是不保证执行

        4. 使用终结方法有一个非常严重的(Severe)性能损失.

         结论是:不应该依赖终结方法来更新重要的持久状态.

二. 终结方法的适用场景

         1. 充当安全网,当在客户端无法通过显式的调用终止方法时,迟释放资源比不释放要好,如果使用终止方法发现资源还未终止,应记录警告.

         2.本地对等体(native peer) ,本地对等体是一个本地对象,普通对象通过本地方法(native method)委托给一个本地对象,当本地对等体被回收时,本地对象并不会被回收,这时候使用终结方法时合适的.

        对于本地对等体的概念存在疑惑,需要再仔细查找资料

猜你喜欢

转载自blog.csdn.net/qq_34332035/article/details/81905790