Пример использования PhantomReference

Насколько я знаю, ссылки попадают в 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 ответ

Решение

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

    while (true) {
        System.gc();
Другие вопросы по тегам