finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?
JVM 68
垃圾回收器(garbage colector)决定回收某对象时,就会运行该对象的 finalize()方法但是在 Java 中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说 filalize()可能永远不被执行,显然指望它做收尾工作是靠不住的。
那么 finalize()究竟是做什么的呢?它最主要的用途是回收特殊渠道申请的内存。Java 程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。
但有一种 JNI(Java Native Interface)调用 non-Java 程序(C 或 C++), finalize()的工作就是回收这部分的内存。