Java仮想キューと参照が引用します

1時目

オブジェクトへの参照を保持ReferenceQueueクラスによって表される基準キューが回収されます。組み合わせて使用​​される場合、ソフト弱、および参照は、オブジェクトが参照された後にキュー、回収システムは、キューに関連付けられたオブジェクト参照に対応する基準を追加するために回収されるで引用しました。仮想参照オブジェクトが解放される前に、オブジェクトが回収される前にアクションを実行することができるように、それは、その参照に関連付けられた対応する仮想キューへの参照を追加します。

ファントム参照オブジェクトは、それが対応して取得することはできません。

二つの戦闘

コード1

import java.lang.ref.*;

public class PhantomReferenceTest
{
   public static void main(String[] args)
      throws Exception
   {
      // 创建一个字符串对象
      String str = new String("疯狂Java讲义");
      // 创建一个引用队列
      ReferenceQueue rq = new ReferenceQueue();
      // 创建一个虚引用,让此虚引用引用到"疯狂Java讲义"字符串
      PhantomReference pr = new PhantomReference (str , rq);
      // 切断str引用和"疯狂Java讲义"字符串之间的引用
      str = null;
      // 取出虚引用所引用的对象,并不能通过虚引用获取被引用的对象,所以此处输出null
      System.out.println(pr.get());  //①
      // 强制垃圾回收
      System.gc();
      System.runFinalization();
      // 垃圾回收之后,虚引用将被放入引用队列中
      // 取出引用队列中最先进入队列中的引用与pr进行比较
      System.out.println(rq.poll() == pr);   //②
   }
}

2つの実行

null
true

3説明

プログラム実行時にオブジェクト参照クラスを使用することは避けてくださいメモリ内に残っています。、ソフト弱い、または仮想文献の方法は、基準オブジェクトを引用した場合、ガベージコレクタは、自由にオブジェクトを解放することができます。あなたがそのライフサイクル中にプログラムを最小限にしたい場合は、これらの参照クラスのサイズによって占められるメモリは非常に良いです。

おすすめ

転載: blog.csdn.net/chengqiuming/article/details/93383592