Java是否与.NET的GC.SuppressFinalize相当
在.Net中,只要显式地释放对象,SuppressFinalize就会在处置模式中使用,以避免终结的相对较高的性能成本。类似的成本也适用于Java,但它似乎没有SuppressFinalize。
我知道,通常情况下最好完全避免终结器,但我不认为我能够为特定的用例避免它们(一个cancel令牌,您可以添加处理程序,只有当另一个令牌未被取消时才能运行,因此由于收集源而变得不朽的令牌必须导致从链接令牌中删除条目,以免它们在没有绑定的情况下积累垃圾条目)。
在Java中是否有类似于SuppressFinalize的内容?如果没有,可以使用可用的工具(例如ReferenceQueue)来近似吗?
发布于 2014-05-22 05:06:53
Java没有原生的"GC.SuppressFinalize“方法。但是IDiposable模式将对您解决这一问题非常有用。
当您知道某项不再需要时,您可以手动处理它,或者能够运行清理代码来安全地关闭连接、关闭文件、etc.Also您将能够使用终结器捕捉不知道何时应该清除对象的情况。
发布于 2015-02-27 23:04:52
我想出了一个可能的解决办法,因为Java中没有类似的方法,只要避免终结器的成本:使用缓存。
显然,与缓存的大小和同步方式有关的调整可能很多,但这应该是一种有效的方法,可以避免在终结器很少运行且需要完成的对象总数不太多的情况下,终结器的成本。
https://stackoverflow.com/questions/23797944
复制相似问题