当前位置: 网站首页 > JAVA > j2se

Effective Java Item7-不使用Finalizers

时间:1970-1-1 08:33:31来源: j2se作者:admin 点击:3次 字体 [ С]

Effective Java 2nd Edition Reading Notes

Item7: Avoid Finalizers

不使用Finalizers。

 

Finalizers是不可预知的,有时是危险的,并且是不必要的。

在C++中,析构函数用于回收资源,而在Java中,通过GC来回收资源。析构函数还用于回收非内存资源,在Java中,通过try{}finally{}来完成同样的工作。

 

首先finalizers并不能保证被马上执行。在对象不可用开始到finalize方法执行之间的时间是任意的。这意味着不能在finalizers中进行具有时间要求的操作。例如在finalizer中关闭文件。[操作系统中可以打开的文件数是有限制的,一旦超过限制,将不能再打开文件。]

何时执行finalizers是GC的功能,因JVM的实现不同而不同。使用finalizers在极端的情况下会导致实例回收的延迟,从而发生OutOfMemoryError。规范没有定义finalizers什么时候执行,甚至不能确保finalizers是否会被执行。

永远不要依赖finalizers去实现持久性的更新。例如在finalizers中释放持久性的锁。

发表评论
验证码:
最新评论