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来验证终结条件。
  • 相关阅读:
    Google搜索引擎如何运作:不会手动调整结果
    一个Ruby脚本
    IE灭绝!?
    除Windows之外的其他操作系统
    刚收到的新书
    奇怪的计算机语言
    小巧的menuetOS
    Ruby学习笔记(1)
    一个通知
    总结 asp.net 和 javascript获取本地IP(MAC)和服务器IP(MAC)的方法
  • 原文地址:https://www.cnblogs.com/yansum/p/6072642.html
Copyright © 2011-2022 走看看