请问closechan()为什么没有回收chan的内存?

来源:1-6 Go 语法背后的秘密

Brook_StudyMachine

2021-05-22 14:50:29

func main() {
        ch := make(chan int, 1)
fmt.Printf("%p\n",ch)
close(ch)
fmt.Printf("%p\n",ch)
 }


0xc000052070

0xc000052070


通过示例和查看源代码,看到closechan之后,chan的内存并没有被回收。


想象中,closechan()后,这个chan就妹用了,应该回收掉减少gc压力

golang为什么不这么做?

写回答

1回答

Xargin

2021-05-22

close 的 channel,

buffer 不一定清空了啊,还可能被使用的

1
hargin
回复
hrook_StudyMachine
hp>按你的代码,也不会被回收的,因为 consume 那边还在访问这个 ch 的,

垃圾回收的前提是从代码上就访问不到这个对象了,像 ch 这种,就是你生产和消费端都退出了,才会被 GC

h021-05-22
共3条回复

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程