Java 使用PhantomReference的示例

Java 使用PhantomReference的示例,java,garbage-collection,phantom-reference,Java,Garbage Collection,Phantom Reference,据我所知,当引用所指向的对象被删除时,引用将落入QueueReference 这里有一个例子,我正要演示这一点,但它不起作用。if中的代码从未执行过。这是什么意思。我用错了吗?或者执行过程中垃圾收集器不工作 public static void main (String[] arg) throws InterruptedException { List<String> names = Arrays.asList("Adam", "Eva"); Refe

据我所知,当引用所指向的对象被删除时,引用将落入
QueueReference

这里有一个例子,我正要演示这一点,但它不起作用。
if
中的代码从未执行过。这是什么意思。我用错了吗?或者执行过程中垃圾收集器不工作

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);
        }
    }
publicstaticvoidmain(字符串[]arg)抛出InterruptedException{
列表名称=Arrays.asList(“Adam”、“Eva”);
ReferenceQueue q=新的ReferenceQueue();
PhantomReference phantom=新的PhantomReference(名称,q);
名称=空;
虽然(正确){
PhantomReference ref2=(PhantomReference)q.poll();
如果(参考2!=null)
System.out.println(ref2.enqueue());
睡眠(1000);
}
}

GC运行时将清除PhanomReference,请尝试System.GC():

    while (true) {
        System.gc();