Java中finalize方法

Java中finalize方法前沿:在面试过程中我们可能会被问到final、finally、finalize的区别?本篇文章将介绍finalize的简单用法。Finalize()是Object类的方法。在回收垃圾对象之前调用此方法。finalize()方法将重写以处理系统资源,执行清理活动并最大程度地减少内存泄漏。简单来说可在释放对象前进行某些操作。代码举例:…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前沿:在面试过程中我们可能会被问到final、finally、finalize的区别?本篇文章将介绍finalize的简单用法。

  • Finalize()是Object类的方法。
  • 在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。
  • finalize()方法将重写以处理系统资源,执行清理活动并最大程度地减少内存泄漏。
  • 简单来说可在释放对象前进行某些操作。

代码举例:

public class FinalizeTest { 
   
    public static void main(String[] args) { 
   
        Student student = new Student("YuShiwen",21);
        System.out.println(student);
        student = null;//此时对象实体就是垃圾对象,等待被回收。但时间不确定。
        System.gc();//强制性释放空间

    }

}

class Student{ 
   
    private String name;
    private int age;

    public Student(String name, int age) { 
   
        this.name = name;
        this.age = age;
    }

    public String getName() { 
   

        return name;
    }

    public void setName(String name) { 
   
        this.name = name;
    }

    public int getAge() { 
   
        return age;
    }

    public void setAge(int age) { 
   
        this.age = age;
    }

    @Override
    public String toString() { 
   
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    //子类重写此方法,可在释放对象前进行某些操作
    @Override
    protected void finalize() throws Throwable { 
   
        super.finalize();
        System.out.println("进行某些操作!");
    }
}

输出结果:

Student{name='YuShiwen', age=21}
进行某些操作!

Process finished with exit code 0

垃圾回收机制关键点:

  • 垃圾回收机制只回收JVM堆内存里的对象空间。

  • 对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力

  • 现在的JVM有多种垃圾回收实现算法,表现各异。

  • 垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。

  • 可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。

  • 程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有
    一些效果,但是系统是否进行垃圾回收依然不确定。

  • 垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一
    个新的引用变量重新引用该对象,则会重新激活对象)。

  • 永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python爬虫scrapy框架_nodejs爬虫框架

    python爬虫scrapy框架_nodejs爬虫框架叮铃铃!叮铃铃!老师:“小明你的梦想是什么?”,沉思了一下小明:“额额 我想有车有房,自己当老板,媳妇貌美如花,还有一个当官的兄弟”老师:“北宋有一个人和你一样···”;哈喽!大家好!请叫我布莱恩·奥复托·杰森张;爬虫部分!一提到爬虫,好多人先想到python没错就是那个py交易的那个,这货所为是什么都能干上九天揽月下五洋捉鳖无处不出现它的身影鄙人对它也是不得不折

    2022年9月17日
    2
  • 几种常见模式识别算法整理和总结

    几种常见模式识别算法整理和总结

    2021年11月29日
    40
  • 数电课设 八路抢答器设计详解

    数电课设 八路抢答器设计详解设计一个八路竞赛抢答器,可同时供八名选手或八个代表队参加比赛,他们的选号分别是1、2、3、4、5、6、7、8,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是S1、S2、S3、S4、S5、S6、S7、S8。给节目主持人设置一个控制开关,用来控制系统的清零(编号显示码管灭灯)和抢答器的开始(开始倒计时)。抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答,优先抢答选手的编号

    2022年10月20日
    3
  • 激光SLAM定位_有用激光定位吗

    激光SLAM定位_有用激光定位吗激光SLAM定位:局部定位、全局定位等

    2022年8月23日
    8
  • ibatis和Mybatis区别

    ibatis和Mybatis区别相同点: 1、都是原生SQL,都方便进行SQL代码调优 2、查询语句后面不能加“;”,否则会报“无效字符错误” 不同点: 1、ibatis传参是parameterClass,mybatis传参是parameterType 2、ibatis出参是resultClass,mybatis传参是resultType 3、ibatis参数占位符是##,mybatis占位符是

    2025年7月18日
    3
  • oracle 11g安装教程_暖气片安装方法图解

    oracle 11g安装教程_暖气片安装方法图解Oracle11G安装图解标签(空格分隔):oracleOracle介绍  OracleDatabase,又名OracleRDBMS,或简称Oracle是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的

    2022年9月21日
    2

发表回复

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

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