你为什么要实现finalize()?

问题:

我一直在阅读很多关于finalize()的菜鸟Java问题,并发现没有人真的明白,finalize()是一种不可靠的清理资源的方法。我看到有人评论说,他们使用它来清理连接,这是真的很可怕,因为唯一的方法来接近一个连接关闭的保证是最终实现try(catch)。
我没有在CS学习,但我已经在Java专业编程近十年了,我从来没有见过任何人在一个生产系统中执行finalize()。这并不意味着它没有其用途,或者我曾经合作的人一直在做正确的事情。
所以我的问题是,用于实现finalize()的用例不能通过语言中的其他进程或语法更可靠地处理?
请提供具体的场景或经验,只需重复一个Java教科书,或者最终确定的用途是不够的,而不是这个问题的意图。

回答:

您可以将其用作持有外部资源(套接字,文件等)的对象的支持。实现一个close()方法并记录它需要被调用。
如果您检测到,则执行finalize()执行close()处理尚未完成。也许有东西倾倒到stderr指出,你正在清理一个错误的呼叫者。
它在特殊/错误的情况下提供额外的安全性。不是每个来电者每次都要做正确的try {} finally {}东西。不幸的是,在大多数环境中都是真实的。
我同意这是很少需要的。正如评论者指出的,它带有GC开销。只有在需要长时间运行的应用程序中的“皮带和吊带”安全性的情况下才可以使用。
我看到,从Java 9开始,Object.finalize()已被弃用!他们指出我们以java.lang.ref.Cleanerjava.lang.ref.PhantomReference为替代方案。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why would you ever implement finalize()?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 4