有没有办法知道谁在Go中拥有对象的引用?

mel*_*kes 19 debugging memory-leaks go

我目前正在尝试在Go代码中调试令人讨厌的内存泄漏.

我知道的:

  • 内存在哪里(pprof-base标志)
  • 为什么要分配新内存(我们的代码中的"重新连接"功能)
  • goroutines的数量没有增长(runtime.NumGoroutine())
  • 如果我这样做object = nil,内存将被垃圾收集(好!但现在我与其他使用此对象的go-routines进行数据竞争)

我不知道的是:

  • 为什么新的内存不被垃圾收集.为此,我需要知道谁持有对象的引用.

感谢您的时间和建议!

小智 -2

您的代码是 404 未找到。

当你设置 object = nil 时。this 并没有立即被清除,但是当某些 goroutine 仍然持有它时,即使 gc 运行,该对象也会保持静止。

你问谁持有引用,使用这个 val 而不将其设置为 nil 的 goroutine 或者在循环中使用它的 goroutine 都会保留引用。

gc() 永远不会将引用的引用标记为黑色,那么它永远不会清晰