当前位置: 首页 > 面试题库 >

OpenJDK的LinkedBlockingQueue实现:节点类和GC [重复]

高兴贤
2023-03-14
问题内容

这个问题已经在这里有了答案

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有多大帮助?


问题答案:

我问了代码作者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



 类似资料:
  • 谁能帮我弄清楚我做错了什么,所以我得到了这个输出错误- 当我测试程序是否插入树的第一个根时,插入函数工作正常,并且成功创建了第一个根,但一旦我将根分配给当前和while循环以搜索父项,然后在其上插入新值,我就会得到NameError:/ 下面是我的代码使用python的实现: 谢谢你 我正在尝试在我的二叉搜索树中插入一个新值,因此有2种情况: 如果BST为空(这很简单,传递正确) 另一种情况是当我

  • 本文向大家介绍springboot实现防重复提交和防重复点击的示例,包括了springboot实现防重复提交和防重复点击的示例的使用技巧和注意事项,需要的朋友参考一下 背景 同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击 目标 通过在指定的接口处添加注解,实现根据指定的接口参数来防重复点击 说明 这里的重复点击是指在指定的时间段内多次点击按钮 技术方案 springbo

  • 此图表显示了我们的Java应用程序在4天内的堆利用率(OU欧盟S1U S2U)。每次下降都是一个Young GC事件。正如您可以注意到的,堆使用率有一个增加的模式。完整的GC在运行6天后发生(图表中未显示)。它将堆使用率降低到正常水平,但暂停时间为2分钟,它会导致应用程序下降许多事务。 我们的JRE是8,我们使用并行GC。堆参数如下所示: 我试图了解什么调整是可能的,使年轻GC更有效,以便它删除所

  • 我正在尝试在nodeJS中实现一个OAUTH2服务器,它允许客户端应用程序登录使用我网站的用户(比如用google登录,在我的例子中是amazon alexa,它使用这个API/客户端应用程序)。 我尝试使用oauth2orise(https://www.npmjs.com/package/oauth2orize),并引用了几个链接:- https://hnryjms.io/2014/07/oau

  • Text 节点的概念 文本节点(Text)代表元素节点(Element)和属性节点(Attribute)的文本内容。如果一个节点只包含一段文本,那么它就有一个文本子节点,代表该节点的文本内容。 通常我们使用父节点的firstChild、nextSibling等属性获取文本节点,或者使用Document节点的createTextNode方法创造一个文本节点。 // 获取文本节点 var textNo

  • Text节点的概念 Text节点的属性 data wholeText length nextElementSibling previousElementSibling Text节点的方法 appendData(),deleteData(),insertData(),replaceData(),subStringData() remove() splitText(),normalize() Docu