31得票1回答
为什么Java 9中废弃了finalize()方法?

为什么Java 9中finalize()方法已被弃用? 是的,它可能会被错误地使用(例如仅一次保存对象免受垃圾收集或尝试在其中关闭一些本地资源,虽然这比不关闭好)。同样,许多其他方法也可能被错误地使用。 那么,finalize()是否真的如此危险或绝对无用,以至于必须将其从Java中删除?...

30得票4回答
Java中替代finalize()方法的方式

Object.finalize() 在Java 9中已被弃用,我认为我理解了原因,但我不知道如何替换它。 我有个实用类称为 Configuration,它基本上拥有应用程序中的所有东西,并持续存在于应用程序的整个生命周期。其中一个服务是记录日志:在第一次请求记录消息时,会创建一个记录器(由于...

30得票3回答
Java 8 中对强可达对象调用 finalize() 方法

我们最近将消息处理应用程序从Java 7升级到Java 8。自从升级以来,我们偶尔会遇到一个异常,即在读取流时该流已经关闭。日志显示,终结器线程正在调用包含流的对象的finalize()方法(这反过来又关闭了该流)。 代码的基本概述如下:MIMEWriter writer = new MIM...

27得票6回答
为什么终结器会有“严重的性能惩罚”?

《Effective Java》中说: 使用finalizer会造成严重的性能损失。 为什么使用finalizer来销毁一个对象会更慢呢?

24得票4回答
Java 9清理器是否应该优先于终结器?

在Java中,重写finalize方法有些名声不好,尽管我不明白为什么。像FileInputStream这样的类在Java 8和Java 10中都使用它来确保调用close方法。然而,Java 9引入了java.lang.ref.Cleaner,它使用幻象引用机制而非GC终结。起初,我认为这只...

23得票4回答
终结者抛出未捕获的异常:Google API Bug 还是三星内核 Bug?

在我的Galaxy Tab 2 (Samsung)上启动我的应用时,我一直收到这个错误。 我正在开发的应用程序非常复杂,很难追踪这个错误的来源。因此,我开始逐个剥离我的应用程序,并最终只保留一个地图视图应用程序,就像您可以在这里找到的那样。 在剥离之后,我只得到了一个纯粹的地图视图应用程序,...

23得票5回答
WPF用户控件的正确清理

我对WPF比较陌生,其中一些东西对我来说很陌生。 首先,与Windows Forms不同,WPF控件层次结构不支持IDisposable。在Windows Forms中,如果用户控件使用了任何托管资源,则通过重写每个控件实现的Dispose方法非常容易清理资源。 在WPF中,情况并不那么简单...

22得票5回答
在 finalize 方法中引用对象

如果在finalize调用期间保存当前对象的引用会发生什么?例如:class foo { ... public void finalize() { bar.REFERENCE = this; } } 这个对象是否被垃圾回收了?当您稍后尝试访问bar.RE...

21得票4回答
我该如何对终结器进行单元测试?

我有一个类,它是一个 IDisposable 对象的装饰器(我省略了它添加的内容),自己使用了一种常见的模式实现了 IDisposable。public class DisposableDecorator : IDisposable { private readonly IDispos...

19得票2回答
.NET的终结器总是被执行吗?

在.NET中,finalizers是否有保证会在某个时间点(避免了断电等情况)执行?我知道GC的工作原理,以及它是不确定何时运行的。 (搜索结果没有给出满意的答案,因此我在高度期望与不易发现的实际答案合并时添加了这个问题。除此之外,我已经知道答案,并将在几天后添加它,以防没有人提到它。)