You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当结构体无外部引用但含全局对象指针时,会被垃圾回收吗?

结构体A的垃圾回收问题解答

代码示例

type B struct {
  // fields of B
}

type A struct {
  pb *B
}

var globalB B

func newA() *A {
  a := &A{
    pb: &globalB,
  }
  return a
}

当调用newA()获取A的引用后,若后续不再有任何指向该A结构体实例的引用,这个A实例会被垃圾回收。

原因很直接:Go采用追踪式垃圾回收机制,它会从根对象(比如全局变量、当前栈帧里的变量等)出发,标记所有能被访问到的可达对象。这里的globalB是全局变量,属于根对象,但A实例只是持有指向globalB的指针,globalB并没有反向指向A实例的引用。当没有其他外部引用指向这个A实例时,它就成了不可达对象,满足垃圾回收的触发条件,最终会被GC回收。

内容的提问来源于stack exchange,提问作者cifer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:07:05