finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
- 垃圾回收器(garbage collector)决定回收某对象时,就会运行该对象的finalize()方法。
- 但是在Java中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说filalize()可能永远不被执行,显然指望它做收尾工作是靠不住的。
- 那么finalize()究竟是做什么的呢?它最主要的用途是回收特殊渠道申请的内存。
- Java程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。但有一种JNI(Java Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。
finally代码块和finalize()方法有什么区别?
- 无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。
- finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。