切换到宽版
 
  • 271阅读
  • 0回复

[说其它]Finalize在对象被虚拟机宣告死亡时会先调用它 [复制链接]

上一主题 下一主题
 

发帖
114
好评度
228
只看楼主 倒序阅读 使用道具 楼主  发表于: 2020-08-22
    finalize是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情(这个对象可以趁这个时机挣脱死亡的命运)。 puAjAvIax  
(Xl+Zi>\{  
      finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前被自动调用的。www.itsonews.com垃圾收集器只知道释放那些由new分配的内存,所以不知道如何释放对象的“特殊”内存。为解决这个问题,Java提供了一个名为finalize()的方法,它的工作原理是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作(如关闭流等操作)。但JVM(Java虚拟机)不保证此方法总被调用。 $1y8X K7r  
       finalize的作用 9]%2Yb8SC  
       finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的finalize的调用具有不确定性。不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。 :MihVLF  
http://www.itsonews.com/itnews/2020-819-15812.html ,L=lg,lH^  
http://talk.cri.cn/n/20200731/a5f675cf-ff66-1389-c349-d822ef7de292.html Aa+<4 R  
http://auto.sina.com.cn/zz/2017-09-22/detail-ifymenmt6209500.shtml `-w,6  
https://sports.eastday.com/a/180125165945002000000.html
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个