您的位置:首页 > 其它

对象与垃圾回收

2014-11-27 20:56 120 查看
7.对象在内存中有三种状态:激活,去活,死亡状态。

8.激活状态:当一个对象被创建后,有一个以上的引用变量引用它,则这个对象在程序中处于激活状态

9.去活状态:如果程序中的对象不再有任何引用变量引用它,就进入去活状态。在去活状态下,系统的垃圾回收机制准备回收该对象所

占用的内存。在回收该对象前,系统会调用所有去活状态对象的finalize方法

10.通过finalize方法可以实现从去活状态到激活状态

11.通过Runtime.getRuntime().runFinalization();可以运行强制垃圾回收机制调用去活对象的finalize()方法

public class TestFinalize 
{
	private static TestFinalize tf=null;
	public void info(){
		System.out.println("测试资源清理的finalize");
	}
	public static void main(String[] args) 
	{
		new TestFinalize();
		//通知系统进行资源回收
		System.gc();
		//强制垃圾回收机制调用去活对象的finalize()
		Runtime.getRuntime().runFinalization();
		tf.info();
	}
	public void finalize(){
		//去活对象重新激活
		tf=this;
	}
}


12.弱引用:当系统垃圾回收机制运行时,无论系统内存是否足够,总是会回收该对象所占用的内存

13.虚引用:用于跟踪对象被垃圾回收的状态,一般与引用队列联合使用

import java.lang.ref.ReferenceQueue;
import java.lang.ref.PhantomReference;
public class TestPhantomReference 
{
	public static void main(String[] args) throws Exception
	{
		String str=new String("fuck");
		//创建一个引用队列
		ReferenceQueue rq=new ReferenceQueue();
		//创建一个虚引用
		PhantomReference pr=new PhantomReference(str,rq);
		//q切断str引用
		str=null;
		//不能通过虚引用访问被引用对象
		System.out.println(pr.get());
		System.gc();
		System.runFinalization();
		//对象被回收后,虚引用被添加到引用队列中。取出引用队列中最先进入队列中的引用与pr比较
		System.out.println(rq.poll()==pr);
	}
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: