
各位大佬好,最近在学习 Go 的垃圾回收机制,关于内存回收不是很明白。 为啥 Go 在垃圾回收时,需要处理栈上的对象,栈上的对象在栈帧弹出的时候不就回收了吗,由编译期直接回收了。但为啥看到三色标记法都有标记栈上对象?
1 njutree 2022-10-17 16:10:14 +08:00 应该是栈上的对象会逃逸到堆 |
2 icexin 2022-10-17 16:41:34 +08:00 基于 tracing 的垃圾回收算法第一步是找到“根”对象,根对象就包括全局对象,栈上对象等。直观的解释是:一个栈上对象可以包含指向堆的成员变量。 |
3 Dganzh 2022-10-17 17:12:30 +08:00 2 楼说的对,如果堆上的对象只有栈上对象引用,就必须通过栈上的对象把这个堆对象描黑,否则就被清理掉了 |