java小心机(3)| 浅析finalize()

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了java小心机(3)| 浅析finalize()脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
每天进步一丢丢,连接梦与想
如果你停止就是谷底,如果你还在努力就是上坡

系列文章
java"小心机"(1)【资源彩蛋!】
java小心机(2)| 重载和构造器的小细节

  • 预备知识
    JNI(Java Native Interface),它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)
  • 概念
    finalize()是Object类中的一个方法,垃圾回收器准备释放对象占用的内存时,首先调用它的finalize()方法。
  • finalize()是否等同于C++中的析构函数
    答案是否定的。
    析构函数:在C++中没有垃圾回收器,当对象需要被销毁时,需要手动调用delete()方法释放内存,而析构函数会在内存释放前被调用,用于释放对象使用的资,比如在其中经常做一些文件保存之类的收尾工作。对象一定会被销毁。
    finalize():会在垃圾回收器准备释放对象内存时被调用,但垃圾回收并不一定发生,只有在濒临内存溢出时才会被调用;若内存一直充足,则永远不会被调用。如果这个程序结束了,垃圾回收器一直没有释放掉你创建的任何对象的存储空间,则随着程序的退出,那些资源也会全部交还给操作系统。
    finalize()并不会确保对象会被销毁,所以它不是析构函数。
  • 作用
    1.释放那些不是通过new分配的内存
    在JNI技中,可能会通过c语言的malloc()分配内存,这部分内存无法通过垃圾回收器释放,只能通过在finalize()中调用本地方法释放。
    2.用于检验终结条件(判断对象在清理时是否安全释放)
    下面看个用于检验终结条件的例子:
public class Book {     public boolean checkedOut = false;      public Book(boolean checkedOut) {         this.checkedOut = checkedOut;     }      public void checkIn() {         checkedOut = false;     }      //重写finalize方法      @override     PRotected void finalize() throws Throwable {         //校验checkedOut         if (checkedOut) {             System.out.println("校验出现了一次错误: Checked out ");         }        suPEr.finalize();     } }
public class TerminationCondITion {     public static void main(String[] args) {          Book novel = new Book(true);         novel.checkIn();          //对checked进行了一次误操作,未进行签入         new Book(true);          //调用Gc 强制执行终结操作(finalize)         System.gc();     } }

本例的终结条件是:所有的Book对象在被当作垃圾回收前都应该被签入(check in)。
在main()方法中可看到,一次误操作未对Book对象进行签入,导致有一本书没有被签入。此时我们可以使用finalize()验证终结条件。

热门阅读:

**【推荐两款神器】不限速下载、追剧神器
**实用代码|javaMail发送邮件(文末重磅资源!)
限时领取| 热门编程语言学习资源,不收藏吗?
java面试系列文章:
java面试| 精选基础题(1)
java面试| 精选基础题(2)
java面试| 精选基础题(3)
阅读原文可查看更多精彩内容...**

end~thanks!

java小心机(3)| 浅析finalize()

一个立志成大腿而每天努力奋斗的年轻人

伴学习伴成长,成长之路你并不孤单!

java小心机(3)| 浅析finalize()

                                             如果觉得文章不错,请点个赞、分享给你的朋友呗! 

脚本宝典总结

以上是脚本宝典为你收集整理的java小心机(3)| 浅析finalize()全部内容,希望文章能够帮你解决java小心机(3)| 浅析finalize()所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。