终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要使用它的。使用终结方法会导致行为不稳定,降低性能,以及可移植性的问题,不过终结方法也有其可用之处。
终结方法的坏处
- 不能保证被及时执行
- 非常严重的性能损失
终结方法的好处
- 充当最后的安全网,但也并不是特别建议
建议
当我们需要手动结束一个对象的时候,显示的释放资源,比如InputStream 的 close方法
总结
总之除非是作为资源回收处理的第二道防线(安全网)或者是为了终结非关键的资源,否则请不要使用终结方法。如果没办法真的使用了finalize,别忘记了调用super.finalize()。还应考虑是否使用终结方法守卫者,使未调用super.finalize()方法的类的父类的终结方法也会被执行。