Posted on 2006-11-23 15:21
itspy 阅读(1250)
评论(6) 编辑 收藏 所属分类:
JAVA技术
最近经常找工作面试,在复习一些基础知识时,让我想起了一个平时没有留言到的问题,就是finalize与GC的关系。在查一些资料后还是不太明白,特别是下面一段话。
根据Java语言规范,JVM保证调用finalize函数之前,这个对象是不可达的,但是JVM不保证这个函数一定会被调用。另外,规范还保证finalize函数最多运行一次。
(上面的这句话来源:http://www-128.ibm.com/developerworks/cn/java/l-JavaMemoryLeak2/index.html)
这句话是不是可以理解:“finalize函数可能不会被运行,并且就算运行也只会被运行一次?”
那么很自然的就要问,它在哪些情况会被调用,在哪些情况下不会被调用。
如果不被调用,那么如何释放一些特定的资源呢?
我以前一直理解的是,它一定会在对象被回收之前被调用,也就是GC会保证它运行一次,也就是肯定会运行一次。