java - finalize() 方法

finalize() 方法

finalize 方法定义在 Object 类中,其方法签名如下:

protected void finalizer() throw Throwable { }
  1. finalize 方法在 GC(垃圾回收器)决定回收一个不被其他对象引用的对象时调用。子类覆写 finalize 方法来处置系统资源或是负责清除操作。

  2. finalizer 方法的调用时机由 sun 和 JVM 开发商共同决定:确定不再有任何未死亡的线程通过任何方法调用来访问或使用该对象时。(即确定对象的任何方法都不(再)会被调用时,调用其 finalize 方法)

  3. 除非一些其他的已经准备好被终止的对象或类将调用 finalize 方法包括在其终止动作之中。(即调用对象的 finalize 方法,此时该对象的 finalize 方法将是最后被调用的方法,在这之后,对象的任何方法都不(再)会被调用。

  4. finalize 方法中可以执行任何操作,包括再次使该对象可用于其它线程(重新初始化);但是,finalize 的通常目的是在对象(一定)不再被需要时(对象将被丢弃)之前执行清除操作。例如,表示输入/输出连接的对象的 finalize 方法可能会在对象被永久丢弃之前执行显式 I/O 事务来中断连接。

  5. Object 类没有提供 finalize 方法的实现,导出类可以按需覆写该方法。

  6. java 不对任何对象的 finalize 方法调用发生的线程做限制,即任何线程都可以调用对象的 finalize 方法,然而,调用 finalize 方法的线程将不能持有任何用户可见的线程同步锁。当 finalize 方法被调用时,如果 finalize 方法抛出异常,且异常未被捕获时,异常将被忽略,finalize 方法将中止。

  7. 当对象的 finalize 方法被调用后,不会再有基于该对象的方法调用,直到 JVM 再次进行回收动作时该对象将被释放,占用的内存将被回收。

  8. 任何对象的 finalize 方法只会被 JVM 调用一次。

  9. finalize()方法引发的任何异常都会导致该对象的终止被暂停,否则被忽略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java中的finalize方法是一个特殊的方法,它在对象被垃圾回收之前被调用。它的作用是在对象被销毁之前,执行一些必要的清理工作,例如关闭文件、释放资源等。finalize方法Java中的一种保护机制,它确保在对象被销毁之前,所有必要的清理工作都已经完成。但是,由于finalize方法的执行时间不确定,因此它不应该被用于释放重要的系统资源。 ### 回答2: Java中的finalize()方法是一种特殊的方法,用于垃圾回收。它是由Java虚拟机(JVM)在对象从内存中被回收之前自动调用的一个方法finalize()方法允许对象在被销毁之前执行任何清理操作,并在垃圾回收过程中释放资源。 finalize()方法的主要作用是在JVM对对象进行垃圾回收之前,让对象有机会执行释放资源、关闭文件、释放锁、解除连接等必要操作。这种方法可以在需要处理敏感信息、释放系统资源、关闭服务或清理状态等情况下创建,并能确保语句块的执行。 虽然finalize()方法Java的保留方法之一,但它已经被证明不是特别可靠,不应该完全依赖它来释放系统资源。这是因为finalize()方法的工作机制不完全可预知,它的调用时机取决于JVM的垃圾回收策略,而不是程序员的控制。 因此,通常建议使用try-finally语句块来确保及时释放资源,而不是依赖finalize()方法。此外,由于finalize()的使用可能会导致程序的不可预测行为,因此JDK 9以后这个方法已经不推荐使用了。 总之,Javafinalize()方法的作用是允许程序员在对象即将从内存中删除之前执行某些操作,以便释放系统资源或清理状态。但程序员不应该完全依赖它来释放系统资源,而应该使用其他更可靠的机制来确保及时释放资源。 ### 回答3: Java中的finalize()方法是在对象销毁时被调用的方法,它允许我们进行一些清理工作和资源释放,以使程序运行更为高效。finalize()方法的作用可以分为两个方面:对象的清理和对象的销毁。 首先,finalize()方法可以在对象被GC垃圾回收器清理时被自动调用,它可以用于执行一些清理任务,例如关闭文件、释放内存等。在Java中,内存管理一般都是由垃圾回收器来完成的,但是在某些情况下,程序员需要进行一些手动的内存管理操作,此时可以通过finalize()方法来实现。 其次,finalize()方法可以有效地防止资源泄漏。当程序运行时,如果对象不再被使用,但是没有正确地释放对象所占用的资源,就会造成资源泄漏。而使用finalize()方法可以在对象销毁时释放对象所占用的资源,避免资源泄漏的发生。 需要注意的是,虽然finalize()方法可以在对象被垃圾回收时释放资源,但是它并不是在对象销毁时被调用的。因为Java的垃圾回收机制是非确定性的,所以finalize()方法并不能保证被及时地执行。因此,即便是使用了finalize()方法,也应该在程序中手动释放资源来确保程序的正确性和稳定性。 总之,finalize()方法Java中扮演着非常重要的角色,它可以在对象被清理或销毁时执行一些必要的操作,对于Java程序的正确性和高效性都有着非常重要的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值