现在有这样一个场景:
每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢

1 wellsc Nov 22, 2020 via iPhone 你可以手动回收 |
2 janxin Nov 22, 2020 一般情况下会被回收,但是不是马上被归还给系统。这个需要根据你的开发和具体 runtime 调度决定。 没有场景谈优化太粗暴了,基础策略是你可以用临时对象池 sync.Pool 减少反复内存分配。 |
3 theknotyouknow OP @wellsc 手动回收,是指直接将这个大数组设置成 nil 吗 |
4 theknotyouknow OP @janxin 这个数组每次接收的数据都不一样,你是指用 sync.Pool 直接覆盖掉上一次对象的值吗 |
5 lhx2008 Nov 22, 2020 via Android 和 java 差不多,没人用会定期自动回收的 |
6 yzbythesea Nov 22, 2020 goroutinue 跑完了,就会自动回收。手动回收没听说过。 |
7 better0332 Nov 22, 2020 会自动回收,大量分配内存可以用 sync.Pool |
8 labulaka521 Nov 23, 2020 via iPhone sync pool |