首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Effective Java 学习札记第6条 - 避免使用终结函数

2012-11-07 
Effective Java 学习笔记第6条 --- 避免使用终结函数终结函数(finalizer)可以用来回收不可到达的对象,就是

Effective Java 学习笔记第6条 --- 避免使用终结函数

终结函数(finalizer)可以用来回收不可到达的对象,就是说对象的生命周期结束后,可以用终结函数来回收为该对象分配的资源。


但是,终结函数执行线程的优先级很低,以至于我们不敢把对时间要求比较高的对象回收让终结函数来回收。JVM总是会延迟终结函数的执行。


对于急需回收对象,可以使用tyr finally,在finally写回收对象的代码,这样就保证对象能及时被回收。

// try-finally block guarantees execution of termination methodFoo foo = new Foo(...);try {    // Do what must be done with foo    ...} finally {foo.terminate(); // Explicit termination method}
?

?????? 终结函数其实也是有用的。第一种情况是当作安全网,当忘了对对象显示回收的时候,用终结函数作为最后的安全屏障。第二种情况是:普通对象通过一个本地方法委托给本地对象叫本地对等体。本地对等体不是普通对象,所以当委托给他的对象被回收的时候本地对等体并不会被回收,所以这时候终结函数就派上用场了。


最后要注意的是,当子类改写覆盖了超类的终结函数时候,如果不显示调用超类的终结函数,那么超类的终结函数将不会被执行。

?

// Manual finalizer chainingprotected void finalize() throws Throwable {try {// Finalize subclass state...} finally {super.finalize();}}

?

????? 总结:尽量不使用终结函数,除非作为安全网或者是用来回收不关键的本地资源。

热点排行