2015-12-10 2 views
2

Насколько я знаю, ссылка падает на QueueReference, когда объект, который был указан ссылкой, удаляется.Пример использования PhantomReference

Вот пример, где я собирался продемонстрировать это, но он не работает. Код внутри 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); 
     } 
    } 

ответ

3

PhanomReference будет очищен при запуске GC, попробуйте System.gc():

while (true) { 
     System.gc(); 
Смежные вопросы