public static void main(String[] args) {
   String s = new String("helloworld");
   ReferenceQueue rq = new ReferenceQueue();
   PhantomReference pr = new PhantomReference(s, rq);
   s = null;
   System.out.println(pr.get()); // 系统无法通过虚引用来获得被引用的对象
   System.gc();
   System.runFinalization();
   System.out.println(pr.get());
 }
 public static void main(String[] args) {
   String str = new String("Hello Java!");
   ReferenceQueue<String> rq = new ReferenceQueue<String>();
   // 創建一個虛引用,指向Hello Java!
   PhantomReference<String> pr = new PhantomReference<String>(str, rq);
   str = null;
   // 不能通過虛引用訪問被引用對象,所以此處為null
   System.out.println(pr.get());
   System.gc();
   System.runFinalization();
   // 當被引用的對象回收后,虛引用將被放入引用隊列中
   System.out.println(rq.poll() == pr);
 }
 @Override
 public void clear() {
   try {
     System.out.println("clear " + this);
   } finally {
     super.clear();
   }
 }
 public static void main(String[] args) throws Exception {
   // 创建一个字符串对象
   String str = new String("Struts2权威指南");
   // 创建一个引用队列
   ReferenceQueue rq = new ReferenceQueue();
   // 创建一个虚引用,让此虚引用引用到"Struts2权威指南"字符串
   PhantomReference pr = new PhantomReference(str, rq);
   // 切断str引用和"Struts2权威指南"字符串之间的引用
   str = null;
   // 取出虚引用所引用的对象,并不能通过虚引用访问被引用的对象,所以此处输出null
   System.out.println(pr.get());
   // 强制垃圾回收
   System.gc();
   System.runFinalization();
   // 取出引用队列中最先进入队列中引用与pr进行比较
   System.out.println(rq.poll() == pr);
 }
 /** @param args */
 public static void main(String[] args) {
   // 创建一个对象
   Person person = new Person("Sunny");
   // 创建一个引用队列
   ReferenceQueue<Person> rq = new ReferenceQueue<Person>();
   // 创建一个虚引用,让此虚引用引用到person对象
   PhantomReference<Person> pr = new PhantomReference<Person>(person, rq);
   // 切断person引用变量和对象的引用
   person = null;
   // 试图取出虚引用所引用的对象
   // 发现程序并不能通过虚引用访问被引用对象,所以此处输出为null
   System.out.println(pr.get());
   // 强制垃圾回收
   System.gc();
   System.runFinalization();
   // 因为一旦虚引用中的对象被回收后,该虚引用就会进入引用队列中
   // 所以用队列中最先进入队列中引用与pr进行比较,输出true
   System.out.println(rq.poll() == pr);
 }
 @Override
 public void clear() {
   super.clear();
   _singleContextId = 0;
   REFS.remove(this);
 }