java - Java 终结的目的是什么?

标签 java finalize finalization

我对finalization的理解是这样的:

为了清理或回收对象占用的内存,垃圾收集器开始工作。 (自动调用?)

然后垃圾收集器取消引用该对象。有时,垃圾收集器无法访问该对象。然后调用 finalize 进行最后的清理处理,之后可以调用垃圾收集器。

这是对最终确定的准确描述吗?

最佳答案

垃圾收集器在后台自动工作(虽然它可以被显式调用,但这种需求应该很少见)。它基本上只清理未被其他对象引用的对象(当然,全貌更复杂,但这是基本思想)。因此它不会更改任何 Activity 对象中的任何引用。如果一个对象不能从任何 Activity 对象访问,这意味着它可以安全地被垃圾收集。

终结意味着清理对象获取的资源(不是内存,而是其他资源,例如文件句柄、端口、数据库连接等)。然而,它并没有真正解决 :-(

  • 无法预测何时调用 finalize()
  • 事实上,无法保证 finalize() 会被调用!

所以即使它被保证被调用,它也不是一个释放资源的好地方:当它被调用释放你打开的所有数据库连接时,系统可能已经用完了空闲连接完全,您的应用程序不再运行。

关于java - Java 终结的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450580/

相关文章:

java - 如何在android中应用onPreferenceClick条件?

java:所有线程终止后关闭连接

c# - C# try-finally CERs 会在迭代器中中断吗?

garbage-collection - 如何完成 lisp :struct containing a pointer?

delphi - 我可以保证在表单销毁后执行自定义完成代码吗?

Java printf 失败 : UnknownFormatConversionException

java - 实现 Java Comparator 的问题 - 泛型

java - 数组列表 intValue()

java - 为什么 Netbeans 警告我完成?

c# - close, dispose, finalize, GC, Idisposable,....你对它们有清楚的描述吗?