finalize() 方法的良好用法

2022-09-03 01:25:57

这主要是出于好奇。

我正在徘徊,如果有人遇到任何好的Object.finalize()用法,除了调试/日志记录/分析目的?

如果你没有遇到任何一个你会说一个好的用法会是什么?


答案 1

如果 Java 对象使用 JNI 指示本机代码分配本机内存,则需要使用 finalize 来确保它被释放。


答案 2

迟到了,但以为我仍然会插话:

我发现终结器的最佳用途之一是调用显式终止方法,无论出于何种原因,这些方法都没有被调用。发生这种情况时,我们还会记录问题,因为它是一个错误!

因为:

  • 不能保证终结器将根据语言规范及时执行(或技术上根本执行)
  • 执行很大程度上取决于 JVM 实现
  • 如果 GC 具有较低的线程优先级,则有时可能会延迟执行

这只剩下少数几个任务,他们可以毫无风险地解决。


推荐