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