java中的finalize

import java.sql.SQLSyntaxErrorException;

/**
 * finalize方法
 * @author changxusw@sina.com
 * @version 1.0
 */
public class FinalizeTest {
    /*
    * finalize方法存在的意义呢,是因为java有些时候会嵌入一些C/C++的代码
    * 嵌入代码其实不要紧,要紧的是,代码里可能会用到malloc这样的方法,这就不好了
    * 这样的方法会在堆栈上开辟内存空间,而垃圾处理器又只能盯着new开辟在堆上的对象不会去管malloc分配的内存
    * 一旦malloc过分就会导致内存资源耗尽,除非再嵌入C代码写free方法
    * 在哪写这个free呢?诶,java给了个地方---finalize方法
    *
    * finalize执行的过程是在垃圾回收器要清除本对象时,先执行finalize方法,而先不把这个对象清除掉
    * 等到下一次再执行垃圾回收的时候,再把这个对象清除掉
    *
    * 这样一来,finalize又有一个新的用处,就是这个对象在被清除之前,应该处于什么状态,或者至少要做什么事
    * 比如说,有一个对象打开了一个文件,那么在对象被清除之前,至少这个文件要被关闭
    *
    * 但是,你写了finalize不一定就会执行,JVM如果没有发现内存不够用,那么,就不会进行垃圾处理,程序结束资源自动释放
    *
    * 要是想一定执行finalize,可以使用这种方式,直接用new创建对象但是不赋值给任何变量,再使用System.gc()
    *
    * 尽管如此,我觉得写finalize方法也不是很好,还是逻辑设计上更清晰一些比较好
    * */

    /*
    * 下面程序的意思是:可以使用带参数的构造器赋值isFull是真是假,在对象被销毁之前必须赋值为假
    * */
    private boolean isFull;

    public FinalizeTest(boolean full) {
        System.out.println("创建对象 isFull: "+full);
        isFull = full;
    }

    public void finalize() {
        System.out.println("执行finalize");
        if (isFull) {
            System.out.println("执行finalize并做处理");
            isFull = false;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值