package frank;
import java.lang.*;
import java.lang.ref.*;
/**
* 对象的软、弱、和虚引用
* 强引用 StrongReference 最常用的一种引用,比如普通的对象和数组等。对象处于可达状态系统就不会回收。
软引用 SoftReference 当系统内存足够时它不会被回收,程序可以使用该对象。
弱引用 WeakReference 不管系统内存是否足够都会回收该对象。
虚引用 PhantomReference 类似于没有引用,单独使用没有太大的意义,主要用于跟踪对象被垃圾回收的状态。
*/
public class App
{
public static void main(String[] args) throws Exception
{
/*
* 引用的用法
*String str = new String("frank");//不能使用直接量,因为直接量会被放到常量池中。
WeakReference wr = new WeakReference(str);//把一个引用对象添加到弱引用里面去
str = null;
System.out.println(wr.get());//获得里面的对象
Runtime.getRuntime().gc();//清理
System.runFinalization();//执行了终结方法,但是也没法变成可达状态
System.out.println(wr.get());//结果 null
*/
/*
* 虚引用
String str = new String("frank");//定义一个对象
ReferenceQueue rq = new ReferenceQueue();//创建一个引用队列
PhantomReference pr = new PhantomReference(str,rq);//创建一个虚引用
str = null;//切断关联
System.out.println(pr.get());//试着取出,输出Null,不能通过虚引用访问引用的对象
Runtime.getRuntime().gc();//强制垃圾回收
System.runFinalization();//强制执行终结器
//垃圾回收后将被放入队列中。
System.out.println(rq.poll() == pr);//获得最先进入的对象后跟当前pr进行比较 输出true。
*/
}
}