Java OpenJDK';s LinkedBlockingQueue实现:节点类和GC
我对OpenJDK实现LinkedBlockingQueue(在java.util.concurrent中)中的节点类的结构有点困惑 我复制了下面对node类的描述:Java OpenJDK';s LinkedBlockingQueue实现:节点类和GC,java,concurrency,garbage-collection,queue,java.util.concurrent,Java,Concurrency,Garbage Collection,Queue,Java.util.concurrent,我对OpenJDK实现LinkedBlockingQueue(在java.util.concurrent中)中的节点类的结构有点困惑 我复制了下面对node类的描述: 静态类节点{ E项目; /** *其中一项: *-真正的后继节点 *-此节点,表示后继节点为head.next *-null,表示没有后续节点(这是最后一个节点) */ 节点下一步; 节点(ex){item=x;} } 具体来说,我对next的第二个选择感到困惑(“这个节点,意思是继任者是head.next”) 这似乎与“出列”
静态类节点{
E项目;
/**
*其中一项:
*-真正的后继节点
*-此节点,表示后继节点为head.next
*-null,表示没有后续节点(这是最后一个节点)
*/
节点下一步;
节点(ex){item=x;}
}
具体来说,我对next的第二个选择感到困惑(“这个节点,意思是继任者是head.next”)
这似乎与“出列”方法直接相关,该方法如下所示:
private出列(){
//断言takeLock.isHeldByCurrentThread();
//assert head.item==null;
节点h=头部;
节点优先=h.next;
h、 next=h;//帮助GC
头=第一;
E x=第一项;
first.item=null;
返回x;
}
所以我们移除了当前的头,我们将其下一个设置为“帮助GC”
这对GC有什么帮助?它对GC有多大帮助?我问代码的作者Doug Lea教授,他说它减少了 GC离开漂浮垃圾的可能性 关于浮动垃圾的一些有用资源:
它们可能是相关的,但util.concurrent似乎在很多地方都有其他问题中提到的相同类型的代码(即,制作成员变量的本地副本),这让我认为它们是不同的问题。如果他们真的有亲戚关系那就有趣了!