Java中finalize()方法的作用

Java中finalize()方法的作用finalize 方法是 Object 提供的的实例方法 使用规则如下 当对象不再被任何对象引用时 GC 会调用该对象的 finalize 方法 finalize 是 Object 的方法 子类可以覆盖这个方法来做一些系统资源的释放或者数据的清理可以在 finalize 让这个对象再次被引用 避免被 GC 回收 但是最常用的目的还是做 cleanupJava 不保证这个 finalize 一定被执行 但是

finalize方法是Object提供的的实例方法,使用规则如下:

  1. 当对象不再被任何对象引用时,GC会调用该对象的finalize()方法
  2. finalize()是Object的方法,子类可以覆盖这个方法来做一些系统资源的释放或者数据的清理
  3. 可以在finalize()让这个对象再次被引用,避免被GC回收;但是最常用的目的还是做cleanup
  4. Java不保证这个finalize()一定被执行;但是保证调用finalize的线程没有持有任何user-visible同步锁。
  5. 在finalize里面抛出的异常会被忽略,同时方法终止。
  6. 当finalize被调用之后,JVM会再一次检测这个对象是否能被存活的线程访问得到,如果不是,则清除该对象。也就是finalize只能被调用一次;也就是说,覆盖了finalize方法的对象需要经过两个GC周期才能被清除。

例子:

//FileInputStream.java protected void finalize() throws IOException { if (guard != null) { guard.warnIfOpen(); } if ((fd != null) && (fd != FileDescriptor.in)) { close(); } }

在finalize里面做资源释放的操作。

有一种观点是,如果使用finalize仅仅是为了观察对象被回收,这时候我们可以用虚引用(PhantomReference)来代替,虚引用无法通过get获得对象,而且创建虚引用必须要有关联队列,当对象被回收之后,虚引用会被放入关联队列中,所以我们可以通过观察关联队列来判断对象是否被回收。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224387.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:03
下一篇 2026年3月17日 下午12:03


相关推荐

  • fastai教程_euleros安装教程

    fastai教程_euleros安装教程从fast.ai学到的十大技巧:如何在几周内上手顶级算法https://www.colabug.com/3887239.htmlfastai系列教程(二)-快速入门MNIST示例https://www.pytorchtutorial.com/fastai-tutorial-2-overview-mnist/…

    2025年10月3日
    5
  • 简述android开发环境搭建[通俗易懂]

    简述android开发环境搭建[通俗易懂]本文简要记录一下android开发环境搭建安装JDK安装Eclipse安装ADT(androiddevelopmentkit插件)安装androidSDK配置Eclipse

    2022年7月23日
    16
  • TensorFlow安装并在Pycharm搭建环境

    TensorFlow安装并在Pycharm搭建环境TensorFlow 手把手安装教学 还有 Pycharm 环境配置 含有丰富图片 适合新手教程

    2026年3月27日
    1
  • SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)

    SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)SPSS(二)SPSS实现多因素方差分析模型单因素方差分析上一篇博客https://blog.csdn.net/LuYi_WeiLin/article/details/89917656已经介绍完毕这篇博客我们主要来学习多因素方差分析多因素方差分析,就是同时考虑若干个控制因素的情况下,分别分析它们的改变是否造成观察变量的显著变动(多个自变量,一个因变量)自变量类型以分类变量为主也可以…

    2022年10月21日
    4
  • outputstreamwriter用法_floating power object

    outputstreamwriter用法_floating power object写这个类的原因,网上有很多介绍这两个类的,InputStreamReader类的使用,没有任何异议,而OutputStreamWriter,看了网的帖子和博客说的都不是很清楚,所以小皮虾好好研究了一下OutputStreamWriter类,所以下面的总结有不对之处,欢迎指正!api类中解释:InputStreamReader是字节流通向字符流的桥梁,将字节流转换为字符流

    2025年8月28日
    13
  • Linux环境下MySql卸载[通俗易懂]

    Linux环境下MySql卸载[通俗易懂]MySQL的安装方法有很多种,常见的有yum、rpm和源码安装,那么针对不同的安装方法,也存在不同的卸载方法,其中yum和rpm安装的卸载方法一样。本节主要介绍Linux下如何彻底卸载已安装过的mysql,以便能顺利安装下一个版本的mysql。1、源码安装卸载虽然源码安装时相对复杂,但是它的卸载却很简单。只要在安装目录下直接执行makeuninstall这个命令,就可以卸载源码安装的mysql,前提是你在这之前没有执行过makeclean。如果执行过makeclean,也没关系,那就直

    2022年9月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号