垃圾回收机制-finalize()

Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize() 

之所以要使用finalize(), 是存在着垃圾回收器不能处理的特殊情况 。假定你的对象(并非使用new方法)获得了一块“特殊”的内存区域,由于 垃圾回收器只知道那些显示地经由new分配的内存空间 ,所以它不知道该如何释放这块“特殊”的内存区域,那么这个时候java允许在类中定义一个由finalize()方法。

这种情况主要发生在native method中,比如native method调用了C/C++方法malloc()函数系列来分配存储空间,但是除非调用free()函数,否则这些内存空间将不会得到释放,那么这个时候就可能造成内存泄漏。但是由于free()方法是在C/C++中的函数,所以finalize()中可以用本地方法来调用它。以释放这些“特殊”的内存空间。

finalize()的主 要用途是释放一些其他做法开辟的内存空间 ,以及 做一些清理工作

finalize流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。


猜你喜欢

转载自blog.csdn.net/qq_15899959/article/details/80062717