关于 Go 垃圾回收栈对象的疑问

2022-10-17 15:58:10 +08:00
 OrangeAdd

各位大佬好,最近在学习 Go 的垃圾回收机制,关于内存回收不是很明白。 为啥 Go 在垃圾回收时,需要处理栈上的对象,栈上的对象在栈帧弹出的时候不就回收了吗,由编译期直接回收了。但为啥看到三色标记法都有标记栈上对象?

2167 次点击
所在节点    Go 编程语言
5 条回复
njutree
2022-10-17 16:10:14 +08:00
应该是栈上的对象会逃逸到堆
icexin
2022-10-17 16:41:34 +08:00
基于 tracing 的垃圾回收算法第一步是找到“根”对象,根对象就包括全局对象,栈上对象等。直观的解释是:一个栈上对象可以包含指向堆的成员变量。
Dganzh
2022-10-17 17:12:30 +08:00
2 楼说的对,如果堆上的对象只有栈上对象引用,就必须通过栈上的对象把这个堆对象描黑,否则就被清理掉了
OrangeAdd
2022-10-17 18:50:27 +08:00
@icexin 感谢大佬解释
OrangeAdd
2022-10-17 18:50:42 +08:00
@Dganzh 明白啦~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887540

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX