您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

java.util.concurrent.LinkedBlockingQueue中的奇怪代码

java.util.concurrent.LinkedBlockingQueue中的奇怪代码

为了更好地了解发生了什么,让我们看看执行代码后列表的样子。首先考虑一个初始列表:

1 -> 2 -> 3

然后h指向headfirst指向h.next

1 -> 2 -> 3
|    |
h    first

然后h.next指向hhead指向first

1 -> 2 -> 3
|   / \
h head first

现在,实际上我们知道只有一个指向第一个元素的活动引用,它本身就是(h.next = h),并且我们还知道GC收集的对象不再具有活动引用,所以当方法结束时,(旧) GC可以安全地收集列表的头部,因为它h仅存在于方法的范围内。

话虽如此,但有人指出,我也同意这一点,即使采用经典的出队方法(即first指向head.nexthead指向first),也没有指向旧头的引用。但是,在这种情况下,旧头仍然悬空在内存中,并且其next字段仍然指向first,而在您发布的代码中,剩下的唯一一个是指向自己的孤立对象。这可能会触发GC动作更快。

java 2022/1/1 18:14:57 有618人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶