当 golang 从通道取消排队时,是否会收集指针的垃圾回收通道?



如果我有这样的东西:

requests := make(chan *RequestStruct, 1000 * 1000)
responses := make(chan *ResponseStruct, 1000 * 1000)

如果所有的requestsresponses都已经出队/消耗掉了,那么以前在那里的指针总有一天会被垃圾回收,对吗?(或者不会,因为没有人在频道上设置为零?(

信道在runtime/chan.go中实现。从缓冲通道读取由函数chanrecv实现,该函数执行以下操作:

qp := chanbuf(c, c.recvx)
typedmemmove(c.elemtype, ep, qp)
typedmemclr(c.elemtype, qp)

存储在通道中的元素由typedmemclr清除,因此不会阻止指向的元素被垃圾收集。

最新更新