我们知道,java的垃圾回收器会负责清理回收无用对象占用的内存资源。但是,当一个java对象并非使用new创建而获取并占用了内存空间时,该如何清理回收它呢?为了应对这种情况,java提供了一个finalize()方法。在类中定义finalize()方法,一旦垃圾回收器准备好释放该对象占用的空间时,就会调用finalize()方法;并在下一次真正执行垃圾回收动作时,才去释放该对象。因此,可以通过定义finalize()方法在垃圾回收器执行释放动作之时,执行一些重要的清理工作。
通常,finalize方法中的操作与“本地方法”有关,即在java中调用非java方法。目前“本地方法”仅支持c/c++,但是c/c++可以调用其他语言代码。因此,理论上java可以调用任何语言的代码。在非java代码中,如果使用了c语言中的malloc()方法分配内存,除非使用free()来释放,否则将造成内存泄露。因此,需要finalize()方法中调用“本地方法”调用它。