2

QueueReference私の知る限り、参照が指すオブジェクトが削除されると、参照が陥ります。

これを実演しようとしていた例ですが、うまくいきません。内部のコードifは実行されていません。どういう意味ですか。私はそれを間違って使用しましたか?またはGarbageCollector、実行中に機能しませんでしたか?

public static void main (String[] arg) throws InterruptedException {
        List<String> names = Arrays.asList("Adam", "Eva");
        ReferenceQueue<List<String>> q = new ReferenceQueue<>();
        PhantomReference<List<String>> phantom = new PhantomReference<>(names, q);
        names = null;
        while(true){ 
           PhantomReference ref2 = (PhantomReference)q.poll();
           if(ref2 != null)
               System.out.println(ref2.enqueue());
           Thread.sleep(1000);
        }
    }
4

1 に答える 1

3

PhanomReference は、GC の実行時にクリアされます。 System.gc() を試してください。

    while (true) {
        System.gc();
于 2015-12-10T15:40:24.913 に答える