Rah*_*rup 5 java garbage-collection finalize
SCJP 6学习指南引用:
在该
finalize()方法中,您可以编写将对相关对象的引用传递回另一个对象的代码,从而有效地使对象无法进行垃圾回收.如果稍后在同一个对象上再次符合垃圾回收条件,垃圾收集器仍然可以处理该对象并将其删除.但是,垃圾收集器会记住,对于此对象,finalize()已经运行,并且它不会finalize()再次运行
它为什么这么设计?finalize()即使第二次将对象标记为集合时,该方法的目的仍然保持良好.那为什么Java决定跳过调用finalize()?
我不知道这是否是最初的原因,但当前的实现将覆盖 Finalize 方法的对象的Finalizer实例(内部子类)排入队列,该内部对象由专用的轮询ReferenceReferenceQueueFinalizerThread.
而且由于 JVM 无法知道该对象是否需要第二次最终确定,因此它无法决定在调用Finalizer该方法后是否必须将新对象放入队列。finalize()
无论如何,您应该避免使用finalize(). 它使对象分配成本更高,阻止逃逸分析,并且不是管理本机资源的非常可靠的方式,因为 GC 可以无限期地推迟终结。
| 归档时间: | 
 | 
| 查看次数: | 1445 次 | 
| 最近记录: |