finalize()方法的良好用途

Sim*_*eon 16 java finalizer object-destruction

这主要是出于好奇.

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

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

bma*_*ies 9

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

  • 为什么不像其他所有资源(打开的文件,数据库连接)那样仅处理本机内存并要求显式关闭?您的Java对象可能只有一个dispose()或close()来进行清理。 (3认同)

Roc*_*den 6

迟到这里的聚会,但我想我仍然会说:

我为终结器找到的最好的用途之一是调用显式终止方法,出于某种原因,这些方法没有被调用.发生这种情况时,我们也会记录该问题,因为它是一个BUG!

因为:

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

这只留下了一些他们可以解决而没有太大风险的任务.