theknotyouknow
V2EX  ›  Go 编程语言

golang 内存回收

By theknotyouknow at 2020 年 11 月 22 日 · 3410 次点击
现在有这样一个场景:
每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
8 条回复  •  2020-11-23 12:08:23 +08:00
wellsc
   1
wellsc  
   2020 年 11 月 22 日 via iPhone
你可以手动回收
janxin
   2
janxin  
   2020 年 11 月 22 日   ❤️ 1
一般情况下会被回收,但是不是马上被归还给系统。这个需要根据你的开发和具体 runtime 调度决定。

没有场景谈优化太粗暴了,基础策略是你可以用临时对象池 sync.Pool 减少反复内存分配。
theknotyouknow
   3
theknotyouknow  
OP
   2020 年 11 月 22 日
@wellsc 手动回收,是指直接将这个大数组设置成 nil 吗
theknotyouknow
   4
theknotyouknow  
OP
   2020 年 11 月 22 日
@janxin 这个数组每次接收的数据都不一样,你是指用 sync.Pool 直接覆盖掉上一次对象的值吗
lhx2008
   5
lhx2008  
   2020 年 11 月 22 日 via Android
和 java 差不多,没人用会定期自动回收的
yzbythesea
   6
yzbythesea  
   2020 年 11 月 22 日
goroutinue 跑完了,就会自动回收。手动回收没听说过。
better0332
   7
better0332  
   2020 年 11 月 22 日
会自动回收,大量分配内存可以用 sync.Pool
labulaka521
   8
labulaka521  
   2020 年 11 月 23 日 via iPhone
sync pool
The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
© 2026 V2EX · 52ms · 3.9.8.5