golang 内存回收

2020-11-22 17:19:22 +08:00
 theknotyouknow
现在有这样一个场景:
每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
2465 次点击
所在节点    Go 编程语言
8 条回复
wellsc
2020-11-22 17:20:55 +08:00
你可以手动回收
janxin
2020-11-22 17:27:08 +08:00
一般情况下会被回收,但是不是马上被归还给系统。这个需要根据你的开发和具体 runtime 调度决定。

没有场景谈优化太粗暴了,基础策略是你可以用临时对象池 sync.Pool 减少反复内存分配。
theknotyouknow
2020-11-22 17:33:20 +08:00
@wellsc 手动回收,是指直接将这个大数组设置成 nil 吗
theknotyouknow
2020-11-22 17:34:11 +08:00
@janxin 这个数组每次接收的数据都不一样,你是指用 sync.Pool 直接覆盖掉上一次对象的值吗
lhx2008
2020-11-22 17:38:53 +08:00
和 java 差不多,没人用会定期自动回收的
yzbythesea
2020-11-22 21:18:19 +08:00
goroutinue 跑完了,就会自动回收。手动回收没听说过。
better0332
2020-11-22 22:32:57 +08:00
会自动回收,大量分配内存可以用 sync.Pool
labulaka521
2020-11-23 12:08:23 +08:00
sync pool

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728079

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX