Все!
Я нашел странный код в LinkedBlockingQueue:
private E dequeue() {
// assert takeLock.isHeldByCurrentThread();
Node<E> h = head;
Node<E> first = h.next;
h.next = h; // help GC
head = first;
E x = first.item;
first.item = null;
return x;
}
Кто может объяснить, зачем нам нужна локальная переменная h? Как это может помочь GC?