zoukankan      html  css  js  c++  java
  • Thinking in java学习笔记之finalize

    finalize:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下次垃圾回收动作发生时,才会
    真正回收对象占用的内存,所以可用此作为对象终结条件的验证。
    注意的三点:
    1.对象可能不被垃圾回收
    2.垃圾回收不等于“析构”
    3.垃圾回收只与内存有关
    示例代码:
    public
    class Book { boolean checkedOut =false; Book(boolean checkOut){ checkedOut=checkOut; } void checkIn(){ checkedOut=false; } protected void finalize(){ if(checkedOut){ System.out.println("Error ,checked out"); try { super.finalize(); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class TerminationConditon { public static void main(String[] args) { Book novel = new Book(true); novel.checkIn(); new Book(true); System.gc();//输出:Error ,checked out
    //System.gc()属于强制进行终结动作。即使不这样做,通过重复执行程序导致大量内存被占用也会引起垃圾回收动作的执行。 } }

    本例的终结条件是所有的book在被当做垃圾回收前都应该checkIn,但由于main方法的错误,有一本书未被checkIn,可以用finalize来验证终结条件。
  • 相关阅读:
    用好C++的智慧
    git patch
    ORACLE 11G导入数据报ORA-12154错误解析
    graphviz
    resource for better user experiences
    reference
    xv6
    common use tools provided as website
    eclipse plugins
    Massive Online Open Course sites
  • 原文地址:https://www.cnblogs.com/yansum/p/6072642.html
Copyright © 2011-2022 走看看