Пример использования 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();