finalize不是c++里面的析构函数,c++中对象销毁时一定调用析构函数,对象一定会被销毁(如果程序没有出错);java的对象却并非总是被垃圾回收。
1、对象可能不被垃圾回收;
2、垃圾回收并不等于“析构”;
3、垃圾回收只与内存有关;java对象设置成null的时候,内存不一定会马上被回收,finalize也不一定会调用。
要用finalize,可能是内存在分配的时候用了c/c++的内存分配的方法,而不是Java的通常做法;
如使用了jni在c++里面malloc了内存,java对象内存回收的时候并不能调用free的方法释放这块内存,导致内存泄露;
这时应该使用finalize的函数,调用native释放内存的接口把分配的内存释放。