Collect from "Think in Java".
Java有垃圾回收器(以下称为GC)来回收不用的对象占据的内存资源。但也有特殊情况:
如果你的对象(并非使用new)获得了一块“特殊”的内存,由于GC只知道释放那些经由Java new分配的内存,所以GC不知道如何释放该对象的这块“特殊”的内存。
为了应对这种情况,Java允许在类中定义一个finalize()方法。它的工作原理“应该”是这样的:
一旦GC准备好释放对象占用的内存空间,将首先调用finalize()方法,并且在下一次GC进行垃圾回收时,才会真正地回收对象所占用的内存。
但需要强调:
这歌finalize()函数并不能看做C++的析构函数,在C++中,如果程序没有错误的话,对象是一定会被销毁的。而在Java中,并非所有对象都会被GC进行“回收”的。换句话说:
1、对象可能不被回收。
2、垃圾回收不等于析构。
这意味着在不需要某个对象之前,如果必须执行某些动作,那么就得需要自己手动来做。Java并未提供“析构函数”类似的概念,要做类似的清除工作,程序员必须手动创建一个执行清除工作的普通方法。
finalize()的用途
看完上面这一段话,相信读者都明白了——不能使用finalize()作为通用的垃圾回收方法。那么finalize()真正的用途是什么呢?
这里引出要记住的第三点:
3、垃圾回收只与内存有关。
其实要理解很简单,Java允许调用C/C++的函数、方法,而C/C++又可以调用其他语言的代码。所以,如果在C/C++编写的代码中,使用了malloc等进行内存的分配,此时GC就不能再释放这些内存了。所以这个时候,finalize()就该登场了。
你必须执行清除
Java不允许创建局部对象,程序员必须使用new,在Java中,也找不到”delete“来释放对象,因为GC会帮助你释放存储空间。但是,GC的存在并不能替代类似C++中的析构函数。如果你希望进行释放存储空间以外的清除工作,还是得明确调用某个恰当的Java方法。
相关推荐
详细描述讲解了java的垃圾回收机制
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。垃圾收集的目的在于清除不再...
Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收...
Java中类的生命周期与java垃圾回收机制
【Java面试题】Java垃圾回收机制
Java垃圾回收机制总结
说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去...
此文档详细介绍了java回收机制的工作原理、工作过程,以及在程序中使用的一些注意事项
Java垃圾回收机制的学习和使用Java垃圾回收机制的学习和使用Java垃圾回收机制的学习和使用
深入Java核心_探秘Java垃圾回收机制 深入Java核心_探秘Java垃圾回收机制
你认真演示了一遍,你就能明白JAVA的垃圾回收机制。当然文档写的不一定全面,比如文档当中关于老年区少年区有一页写的不是很完整,我也没有添加太多进去,但是还是很有很全面很有参考意义的。
Java垃圾回收机制详解!! GC详解!!
Azul Systems CTO & co-Founder, Gil Tene 在SpringOne2GX 2012大会上发表的演讲资料,全面深入地阐述Java垃圾回收的四种机制。并介绍了当今世界上性能与吞吐量最高的JVM产品Zing JVM。 如果希望深入了解Java的垃圾...
Java垃圾回收机制研究
Java垃圾回收机制.doc