dqeznd1697 2013-08-23 08:02
浏览 19
已采纳

垃圾收集/链表

Will the garbage collector (in theory) collect a structure like this?

package main

type node struct {
    next *node
    prev *node
}

func (a *node) append(b *node) {
    a.next = b
    b.prev = a
}

func main() {
    a := new(node)
    b := new(node)
    a.append(b)
    b = nil
    a = nil
}

This should be a linked list. a points to b, b points back to a. When I remove the reference in a and b (the last two lines) the two nodes are not accessible any more. But each node still has a reference. Will the go garbage collector remove these nodes nonetheless?

(Obviously not in the code above, but in a longer running program).

Is there any documentation on the garbage collector that handles these questions?

  • 写回答

2条回答 默认 最新

  • dpg76975 2013-08-23 08:09
    关注

    The set of garbage collector (GC) roots in your program is {a, b}. Setting all of them to nil makes all heap content eligible for collection, because now all of the existing nodes, even though they are referenced, are not reachable from any root.

    The same principle guarantees also for example that structures with circular and/or self references get collected once they become not reachable.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥23 (标签-bug|关键词-密码错误加密)
  • ¥66 比特币地址如何生成taproot地址
  • ¥20 数学建模数学建模需要
  • ¥15 关于#lua#的问题,请各位专家解答!
  • ¥15 什么设备可以研究OFDM的60GHz毫米波信道模型
  • ¥15 不知道是该怎么引用多个函数片段
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决