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 回答