Mic*_*Kay 10 garbage-collection finalizer java-9
Object.finalize() 在Java 9中已弃用,我想我理解其中的原因,但我很难看到如何替换它.
我有一个名为Configuration的实用程序类,它实际上有一个实例,它拥有应用程序中的所有内容,并持续应用程序的持续时间.它提供的服务之一是记录:在第一次请求记录消息时,创建记录器(由于各种遗留原因,它是我自己的记录器而不是标准记录器),并在Configuration对象的字段中保存引用,并且在应用程序终止时,无论是正常还是异常,我想释放记录器所拥有的任何资源(这是一个黑盒子,因为我的库的用户可以提供他们自己的实现).
目前,这是通过Configuration.finalize()调用方法实现的logger.close().
我应该做什么呢?
您可以将线程作为关闭挂钩添加到运行时:
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
// cleanup code
}));
Run Code Online (Sandbox Code Playgroud)
这在 VM 终止时被调用,因此finalize在您的特定情况下它应该是一个很好的替代品