作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在对象上实现类似于 Java 语言中有保证的 Finalize() 的行为。我希望在垃圾收集发生之前执行一些语句。请注意,finally block 在这里没有用,因为finally 就在try block 之后运行,这不是我的要求。基本上我想在对象从 JVM 堆中卸载之前对其进行序列化。请指教。
最佳答案
没有办法实现无论如何都会执行的finalize()
方法,因为JVM不能保证调用它。例如,程序退出时留在堆上的对象可能永远不会调用其 finalize()
方法,具体取决于当前的 JVM。
通常不建议使用finalize()
来释放除内存之外的任何资源,更不用说除了释放资源之外执行任何其他操作。如果您想序列化对象,请尝试选择不同的时间点。
有一个good article总结了您需要了解的关于终结器的几乎所有内容。
关于java - 如何实现对象的有保证的终结行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579478/
据我所知,不能保证 Object.finalize() 总是被调用。但是如果有重要的非GC资源,并且用户没有意外调用close(),我该如何释放该资源?PS。 .NET中的Object.Finaliz
我是一名优秀的程序员,十分优秀!