java - Finalize() 何时执行?

标签 java jvm finalizer finalize

在一次采访中我被问到,假设 JVM 在没有使用 A 类对象时运行 gc。

class A{
//some code here
protected void finalize(){
//code here
}
}

是否保证finalize()的执行。我说是的

接下来的问题是,如果A类的obj正在被使用,如果现在JVM运行GC,它是否会执行finalize()。我说不,它不会执行这个finalize(),因为JVM不收集A的对象。

但是她没有发表任何评论,只是看起来很失望。

我理解错了吗?提前致谢

最佳答案

不能保证类 finalize()方法将被调用。

The general contract of finalize is that it is invoked if and when the JavaTM virtual machine has determined that there is no longer any means by which this object can be accessed by any thread that has not yet died, except as a result of an action taken by the finalization of some other object or class which is ready to be finalized

关于java - Finalize() 何时执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177580/

相关文章:

java - 使用 SQlite 数据库在自定义基础适配器 ListView 中存储复选框状态

java - 是否可以知道进程是否在 Linux 上的 Receive() 调用上处于阻塞状态等待?

java - 使用 Samurai 进行线程转储分析

java - 对象死亡时不执行终结器方法

java - XMLEncryptionFactory 在哪里?

Java JNA 聚焦特定窗口

java - 为什么要在 compareTo(Object) 中进行转换

java - Java 类文件可以使用保留关键字作为名称吗?

c#:如何处理来自第 3 方库的终结器异常?

C# WeakReference 对象在终结器中为 NULL,但仍被强引用