java垃圾回收之finalize()方法

/**
 * 一、java的垃圾回收:
 * 1.对象可能不被垃圾回收
 * 2.垃圾回收并不等于"析构"(c++销毁对象函数)
 * 3.垃圾回收只与内存有关
 *
 * 二、finalize()方法,在对象被垃圾回收时触发
 *
 * 三、手动触发垃圾回收的方式System.gc()等方法,或者不停new对象让jvm发现内存要不够用了
 * 以上来自thinking in java 第四版
 * @author rll
 * @description: finalize()练习
 * @date 2020/12/27 16:00
 */
class Book {
    private int id = 0;
    private boolean checkOut = false;

    Book(boolean checkOut, int id) {
        this.id = id;
        this.checkOut = checkOut;
        System.out.println("create b" + id);
    }

    void checkIn() {
        this.checkOut = false;
    }

    @Override
    protected void finalize() {
        System.out.println("err:check out  b" + id + "  check " + checkOut);
    }
}

public class TerminationCondition {
    public static void main(String[] args) {
        int num = 0;
        Book b1 = new Book(true, num++);
        b1.checkIn();
        b1 = null; //b1为null,没有引用对象,会被回收
        System.out.println("==========");//想通过分割线查看回收会不会在gc前执行
        new Book(true, num++);
        System.gc();
    }
}

一、java的垃圾回收:
  1.对象可能不被垃圾回收
  2.垃圾回收并不等于"析构"(c++销毁对象函数)
  3.垃圾回收只与内存有关
 
二、finalize()方法,在对象被垃圾回收时触发
 
三、手动触发垃圾回收的方式System.gc()等方法,或者不停new对象让jvm发现内存要不够用了

 

 

许多情况下,清理并不是问题,仅需让垃圾回收器完成该动作就行。但当必须亲自处理清理时,就得多做努力并多加小心。因为,一旦涉及垃圾回收,能够信赖的事就不会很多了。垃圾回收器可能永远也无法被调用,即使被调用,它也可能以任何它想要的顺序来回收对象。最好的办法事除了内存以外,不能依赖垃圾回收器去做任何事。如果需要进行清理,最好是编写你自己的清理方法,但不要使用finalize()。    ——《java编程思想》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值