1

我有一个关于垃圾收集器和 Object.finalize() 的问题。我创建了一个实现 finalize 方法的类。如果我在 DDMS 中运行我的应用程序并强制 GC,则对我的类的对象调用 finalize,而没有留下任何引用。但是,如果我在我的应用程序中调用 System.gc(),则不会调用 finalize。离开应用程序时调用 System.exit(0) 也不会导致 finalize。为什么不调用finalize?

4

1 回答 1

1

但是,如果我在我的应用程序中调用 System.gc(),则不会调用 finalize。

那是因为您的对象没有被垃圾收集。gc()不做一个完整的GC。相反,它会收集一些垃圾,然后返回。

离开应用程序时调用 System.exit(0) 也不会导致 finalize。

那是因为您的进程正在被终止。终结器不会在进程终止时运行。而且,正如 Raghunandan 所说,请不要打电话System.exit(0)

于 2013-09-29T12:10:16.087 回答