您的位置:首页 > 编程语言 > Java开发

java垃圾回收机制

2011-03-16 10:21 99 查看
1:对象可能不被垃圾回收

2:垃圾回收并不等于“析构”

3:垃圾回收只与内存有关,为了回收程序不再使用的内存

java虚拟机采用了“自适应”的垃圾回收机制,即“自适应的、分代的、停止—复制、标记—清扫”式垃圾回收器。

java虚拟机会见识,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记——清扫”方式,如果堆控件出现很多碎片,就会切换回“停止——复制”方式。

下面介绍两种方式的运行方式:

停止——复制(stop-and-copy)先暂停程序的运行,(所以它不属于后台回收模式),然后将所有存货的对象从当前堆复制到另一个堆,没有被复制的全是垃圾,当对象被复制到新堆是,他们是紧密排列的。这种方式效率很低,首先的有两个对,然后得在这两个分离的堆之间来回倒腾。

标记——清扫(mark_and-sweep)从堆栈和静态存储去出发,遍历所有的引用,进而找到所有存货的对象,每当他找到一个存活对象,就会给对象设一个标记,这个过程中不会回收任何对象。只有全部标记完成的时候,清理动作才会开始,在清理过程中,没有标记的对象将被释放,不会有任何复制动作,所以剩下的堆控件是不连续的。

Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。
System.gc()
Runtime.getRuntime().gc()
上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息