现在有这样一个场景:
每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
8 条回复 • 2020-11-23 12:08:23 +08:00
|
1
wellsc 2020 年 11 月 22 日 via iPhone
你可以手动回收
|
|
2
janxin 2020 年 11 月 22 日 一般情况下会被回收,但是不是马上被归还给系统。这个需要根据你的开发和具体 runtime 调度决定。
没有场景谈优化太粗暴了,基础策略是你可以用临时对象池 sync.Pool 减少反复内存分配。 |
|
3
theknotyouknow OP @wellsc 手动回收,是指直接将这个大数组设置成 nil 吗
|
|
4
theknotyouknow OP @janxin 这个数组每次接收的数据都不一样,你是指用 sync.Pool 直接覆盖掉上一次对象的值吗
|
|
5
lhx2008 2020 年 11 月 22 日 via Android
和 java 差不多,没人用会定期自动回收的
|
|
6
yzbythesea 2020 年 11 月 22 日
goroutinue 跑完了,就会自动回收。手动回收没听说过。
|
|
7
better0332 2020 年 11 月 22 日
会自动回收,大量分配内存可以用 sync.Pool
|
|
8
labulaka521 2020 年 11 月 23 日 via iPhone
sync pool
|