今天介绍一下finalize,对于初级工程师来说,最常见的一个面试问题就是:final,finally,finalize的区别了吧。在Java编程思想这本书中也有介绍到finalize。下面我将大致来说说这个finalize的作用。
对于java工程师来说,gc一定不会陌生吗。java有别于其他c之类的语言就是开发者不需要关心内存释放的问题,gc会帮我们处理。但gc只管new出来的东西,也就是只负责堆里面的内存,但无法关闭其他资源,也无法处理java调用C或其他语言分配出的内存。这里打岔一下,问大家一个问题。如果gc只负责堆的内存,那栈的内存谁管??这问题是我在了解finalize的过程中,想到了。后面去csdn的论坛问的。原来栈的内存是自己管的,栈先入后出的数据结构就是决定了它的内存是子负责内存的,当在一段代码块定义一个变量时,Java在栈中为这个变量分配内存空间,当该变量退出其作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
finalize就是应对那些不是new出来的对象释放内存用的。工作原来是这样的:当java类调用本地方法库(c或c++等其它语言)。一旦gc准备好释放该java类,将首先调用其finalize()方法,所以你打算用finalize的时候,就能在java对象被回收之前,调用finalize方法释放c或其它语言的内存。