java - 终结器如何与分代 GC 交互?

标签 java garbage-collection jvm

Java 的 finalize在 JVM 确定对象符合垃圾回收条件后调用该方法。对于何时发生这种情况,或者在程序退出之前是否会发生,没有真正的保证。我的问题是 finalize 是否保证为实际上被垃圾收集的对象调用。我特别考虑的是分代 GC 中最年轻一代中的对象。

在分代 GC 中,最年轻的一代通常会使用简单的标记-清除集合进行 GC,其中仅遍历 Activity 对象并将其复制到新空间。因此,最年轻一代中的垃圾实际上并没有被遍历。而如果垃圾没有被遍历,那么我们如何保证对于变成垃圾的对象调用finalize呢?看起来要么a)不能保证这些在最年轻的一代中成为垃圾的对象会调用finalize,要么b)保证finalize将被调用被调用,但覆盖 finalize 的对象以某种方式以不同的方式处理。

最佳答案

这篇文章向您展示了可终结对象的一种实现是如何工作的 http://www.fasterj.com/articles/finalizer1.shtml

关于java - 终结器如何与分代 GC 交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19275387/

相关文章:

java - 用 Java 实现显式垃圾收集算法

java - 无法从 lein 项目中的存储库导入 java 库

java - 用 StringBuilder 附加一个逗号

encryption - Java - 如何修复 InvalidKeyException : Wrong algorithm type - RSA

java - 多线程垃圾回收

python - 覆盖析构函数而不调用他们的 parent

java - 我认为java中只有一种类加载器就足够了

java - 如何在混合 Java 版本的世界中使用泛型?

java - 数据库或 Java 代码中的大写方法?

java - 在抽象构造函数类中初始化变量