使用PhantomReference的示例

时间:2015-12-10 15:34:13

标签: java garbage-collection phantom-reference

据我所知,当引用指向的对象被删除时,引用会落入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);
        }
    }

1 个答案:

答案 0 :(得分:3)

当GC运行时,将清除PhanomReference,尝试使用System.gc():

    while (true) {
        System.gc();