如何解决OpenJDK的LinkedBlockingQueue实现:节点类和GC [重复]
我问了代码作者Doug Lea教授,他说这减少了GC留下浮动垃圾的机会。
一些关于浮动垃圾的有用资源:
http://www.memorymanagement.org/glossary/f.html#floating.garbage
http://java.sun.com/docs/hotspot/gc1.4.2/#4.4.4.%20Floating%20Garbage|outline
http://blog.johantibell.com/2010/04/generational-garbage-collection- and.html
解决方法
这个问题已经在这里有了答案 :
java.util.concurrent.LinkedBlockingQueue中的奇怪代码 (4个答案)
2年前关闭。
OpenJDK的LinkedBlockingQueue实现(在java.util.concurrent中)对Node类的结构感到有些困惑。
我已经复制了以下节点类的描述:
static class Node<E> {
E item;
/**
* One of:
* - the real successor Node
* - this Node,meaning the successor is head.next
* - null,meaning there is no successor (this is the last node)
*/
Node<E> next;
Node(E x) { item = x; }
}
具体来说,我对下一个第二选择感到困惑(“此节点,意味着后继者是head.next”)。
这似乎与出队方法直接相关,如下所示:
private E dequeue() {
// assert takeLock.isHeldByCurrentThread();
// assert head.item == null;
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;
}
因此,我们删除了当前标题,并将其下一个设置为“ help GC”。
这对GC有何帮助?对GC有多大帮助?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。