码迷,mamicode.com
首页 > 其他好文 > 详细

巩固 finalize() 方法

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

标签:tar   java代码   sdn   hellip   shell   lan   垃圾回收器   代码   部分   

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() 方法

标签:tar   java代码   sdn   hellip   shell   lan   垃圾回收器   代码   部分   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!