Java PhantomReference没有入队

时间:2014-10-02 12:42:09

标签: java reference garbage-collection

我试图了解Java中PhantomReferences的工作原理并为此编写了这个程序。

public static void main(String[] args) throws InterruptedException {

    final ReferenceQueue refQueue = new ReferenceQueue();
    Employer emp = new Employer();
    emp.setName("John");
    PhantomReference<Employer> phantom = new PhantomReference<Employer>(emp, refQueue);
    List referenceList = new ArrayList();
    referenceList.add(phantom);

    Thread th = new Thread(new Runnable(){

        @Override
        public void run() {
            try {
                PhantomReference ref =  (PhantomReference) refQueue.remove();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }                        
        }                
    });
    th.start();

    for (int i = 0; i < 50000000; i++) {                
        if(i==(50000000-1)){
            Thread.sleep(10000);
            System.out.println(i);
            System.out.println("setting emp to null ");
            emp=null;
            System.gc();
        }                
    } 
}

但是在这里我没有看到引用如java API文档中提到的那样。 我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

这是重复的...但我找不到原文。

简而言之:排队......一天或另一天。不是马上。也许在下一次GC运行之后,可能是下周。时间无法保证。