java中的垃圾回收之finalize()用法

  1. 简介
      我们都知道,java有垃圾回收器专门负责回收无用对象占据的内存资源。所以我们一般不需要去清理没用的对象内存空间(类似于C++中的析构函数)。但是也有特殊情况,假设对象不是通过new得到的内存区域,那么垃圾回收器就不能回收该块内存。这是因为垃圾回收器只知道释放那些经由new分配的内存。为了应对这种情况java允许在类中定义finalize()方法。
      那么finalize的原理是怎样的呢?刚才提到finalize()只负责一种特殊情况,即通过创建(new)对象方式以外的方式为对象分配存储空间。所以JVM保证在一个对象所占用的内存被回收之前,如果它实现了finalize方法,则将首先调用finalize()方法。Object默认finalize什么都不做。
      
    下面有个finalize()的例子:
      
/*
*Using finalize() to detect an Object that hasn't been properly cleaned up
*/
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");
        }
    }
}
public class TerminationCondition{
    public static void main(String [] args){
        Book novel=new Book(true);
        //Proper cleanup
        novel.checkIn();
        //Drop the reference,forget to clean up
        new Book(true);
        //Force garbage collection &finalization
        System.gc();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值