【发布时间】:2019-05-23 03:07:11
【问题描述】:
发件人:
https://www.baeldung.com/java-memory-management-interview-questionsQ11
当一个对象符合 GC 条件时,垃圾收集器必须对其运行 finalize();此方法保证只运行一次,因此收集器将对象标记为已完成并让它休息直到下一个循环。
我有几个问题要问:
- 这个说法正确吗?
- 是否在标记阶段,垃圾收集器是否调用 finalize() 方法?
- 为什么它要休息到下一个周期?
P.S:我明白 finalize() 最终在 Java 9 中被弃用了。感谢决定这样做的好灵魂。
【问题讨论】:
-
是的,没错。我忘记了 Java 规范对 finalize 的具体规定,所以我不知道它是否准确说明了 GC 将调用
finalize()的哪个阶段,但 “有资格进行垃圾收集” 是重要的一点。那是一个对象可以finalize()。 -
@markspace 规范 (JLS 12.6) 没有说明任何阶段。这是一个实现细节。
标签: java memory-management garbage-collection finalize