finalize
它是Object
中的一个方法,与C++中的析构函数类似,与垃圾回收有关,在java 9中已弃用。当垃圾回收器确定不存在该对象的更多引用时,也就是确定当前尚未终止的任何线程都无法再通过任何方法访问该对象,则JVM会调用该方法,并且最多调用一次,但如果准备中止的某个类或对象的终结操作执行了某个操作,则不会调用。finalize
方法中可以执行让该对象给其他线程使用的操作,不过它的主要目的是在对象不可撤销的前提下进行清除操作。JVM不保证某个线程会调用给定对象的finalize
方法,当某个线程调用它后也不会持有任何用户可见的同步锁。如果finalize
方法抛出未被捕获的异常则会被忽略,当前的finalize
终结操作停止。
调用finalize
十分消耗资源,并且由于它调用的不确定性,所以不建议将一些资源清除工作放在finalize
中执行,而是是用哪个try...finally
块或类似的机制实现。
网友评论