说到java的垃圾回收机制,大家可能都以为很简单,不就是那个啥的自动回收嘛,貌似还有个神马gc()和finalize()方法。但是深究起来,你真的很清楚具体是怎么一回事么?2个方法在什么时候用或者被调用?回收的到底是什么垃圾?具体的过程又是一个怎样的实现呢?还有诸如此类的细问题。。。
首先,我们必须明确一点,垃圾回收机制回收的到底是神马东西?就是所谓的垃圾是神马?
我们都知道,我们可以通过代码在堆中new一个对象,为它分配一个相应的内存空间。那么当这个对象没有被任何变量引用的时候,这个内存就变成了垃圾,等待GC的回收。注意,回收的是内存空间,而不是对象的本身。
那么,我们又怎么去回收这些垃圾呢?
finalize()方法:object类下的一个方法,主要是清理那些对象(并非使用new)获得了一块“特殊”的内存区域。程序员可以用finalize()来操作。它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()的方法。并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存(先进行一次唤醒)。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。注意这里的finalize()并不是C++里的析构.在C++中,对象一定会被销毁,而在Java里的对象却并非总是被垃圾回收(1.对象可能不被垃圾回收(唤醒成功);2.垃圾回收并并不等于“析构”)。
finalize()在什么时候被调用?
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候;
2.程序退出时为每个对象调用一次finalize方法;
3.显式的调用finalize方法
除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因。
就算你直接写了这个方法,你可能发现finalizer没有被调用,因为程序经常没有产生很多的垃圾来触发收集器。
http://www.iteye.com/topic/484934 友情链接,希望大家能看懂。。。
gc()方法:有java.lang.System.gc();也有java.lang.Runtime.getRuntime().gc()
这个2个都是object类子类的方法。。。
gc()它的作用就是启动一个垃圾回收器。而垃圾回收器才会调用其finalize()方法来进行垃圾的回收。
它一般是一个显示的请求,请求JVM进行垃圾回收。为这个命令只是建议JVM安排GC运行, 还有可能完全被拒绝. GC本身是会周期性的自动运行的,由JVM决定运行的时间。
分享到:
相关推荐
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