Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenJDK';s LinkedBlockingQueue实现:节点类和GC_Java_Concurrency_Garbage Collection_Queue_Java.util.concurrent - Fatal编程技术网

Java OpenJDK';s LinkedBlockingQueue实现:节点类和GC

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”) 这似乎与“出列”

我对OpenJDK实现LinkedBlockingQueue(在java.util.concurrent中)中的节点类的结构有点困惑

我复制了下面对node类的描述:

静态类节点{
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似乎在很多地方都有其他问题中提到的相同类型的代码(即,制作成员变量的本地副本),这让我认为它们是不同的问题。如果他们真的有亲戚关系那就有趣了!