我对finalization的理解是这样的:
为了清理或回收对象占用的内存,垃圾收集器开始工作。 (自动调用?)
然后垃圾收集器取消引用该对象。有时,垃圾收集器无法访问该对象。然后调用 finalize 进行最后的清理处理,之后可以调用垃圾收集器。
这是对最终确定的准确描述吗?
最佳答案
垃圾收集器在后台自动工作(虽然它可以被显式调用,但这种需求应该很少见)。它基本上只清理未被其他对象引用的对象(当然,全貌更复杂,但这是基本思想)。因此它不会更改任何 Activity 对象中的任何引用。如果一个对象不能从任何 Activity 对象访问,这意味着它可以安全地被垃圾收集。
终结是意味着清理对象获取的资源(不是内存,而是其他资源,例如文件句柄、端口、数据库连接等)。然而,它并没有真正解决 :-(
- 无法预测何时调用
finalize()
- 事实上,无法保证
finalize()
会被调用!
所以即使它被保证被调用,它也不是一个释放资源的好地方:当它被调用释放你打开的所有数据库连接时,系统可能已经用完了空闲连接完全,您的应用程序不再运行。
关于java - Java 终结的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450580/