finalize的理解
一般的回答:它是Object中的一个方法,子类重写它,垃圾回收时候方法会被调用,可以再其中进行一些资源的解释和清理工作。
优秀的回答:将资源的释放和清理放在finalize方法中是非常不好的,影响性能,严重时候会引起OOM,从java9开始就被标注为不建议使用。
第一:从表面上看finalize方法的调用次序不能被保证
第二:日志中Finalizer表示输入日志的线程名字,是这个守护线程执行的方法。
第三:如果将finalize中的代码出现异常,根本没有异常输出。
finalize的调用过程
unfinalized队列
当重写了finalize方法的对象,在构造方法调用之时,JVM都会将其包装成一个Finalizer对象,并假如unfinalized队列中。
ReferenceQueue队列
当对象可以被回收时候就把对象加入到这个队列中。