首页 > 其他 > 详细

巩固 finalize() 方法

时间:2019-03-10 10:41:48      阅读:163      评论:0      收藏:0      [点我收藏+]

1、java gc要回收对象的时候,首先要调用这个类的finalize方法,但是并不是调用这个finalize方法就等同于垃圾回收,只是在gc之前 finalize 方法会被调用,所以基本可以说其被回收了。

2、但由于gc的自动回收机制,并不能保证 finalize 方法会被及时地执行(垃圾对象的回收时机具有不确定性),也不能保证它们会被执行(程序由始至终都未触发垃圾回收)。

3、提供这样的机制的原因在于:让我们有时想在撤消一个对象时完成一些操作(有点像生命周期钩子),比如一些Java以外的代码编写的Class(比如JNI-Java Native Interface,C语言malloc()分配的内存),垃圾回收器并不能对这些部分进行正确的回收,进而在 finalize 方法中另外干预(那这些Class要怎么用java代码释放呢?让Java代码去运行个shell脚本?);或者释放非Java 资源(如打开的文件资源、数据库连接等)。

4、如果在 finalize 中重新让对象不符合gc条件,这样对象就避开了一次gc,但下次对象再次符合条件的时候 finalize 不会被调用,因为 finalize 只能被调用一次(why)

5、最后:它什么时候会被调用

  • 所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候。
  • 程序退出时为每个对象调用一次finalize方法。
  • 显式的调用finalize方法。(那这样算被调用一次吗?)

 

再补充吧……

 

参考:https://blog.csdn.net/crazylai1996/article/details/84900818

巩固 finalize() 方法

原文:https://www.cnblogs.com/LinsenLi/p/10503924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!