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

被折叠的 条评论
为什么被折叠?



