V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
theknotyouknow
V2EX  ›  Go 编程语言

golang 内存回收

  •  
  •   theknotyouknow · 2020-11-22 17:19:22 +08:00 · 2568 次点击
    这是一个创建于 1499 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有这样一个场景:
    每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
    当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
    8 条回复    2020-11-23 12:08:23 +08:00
    wellsc
        1
    wellsc  
       2020-11-22 17:20:55 +08:00 via iPhone
    你可以手动回收
    janxin
        2
    janxin  
       2020-11-22 17:27:08 +08:00   ❤️ 1
    一般情况下会被回收,但是不是马上被归还给系统。这个需要根据你的开发和具体 runtime 调度决定。

    没有场景谈优化太粗暴了,基础策略是你可以用临时对象池 sync.Pool 减少反复内存分配。
    theknotyouknow
        3
    theknotyouknow  
    OP
       2020-11-22 17:33:20 +08:00
    @wellsc 手动回收,是指直接将这个大数组设置成 nil 吗
    theknotyouknow
        4
    theknotyouknow  
    OP
       2020-11-22 17:34:11 +08:00
    @janxin 这个数组每次接收的数据都不一样,你是指用 sync.Pool 直接覆盖掉上一次对象的值吗
    lhx2008
        5
    lhx2008  
       2020-11-22 17:38:53 +08:00 via Android
    和 java 差不多,没人用会定期自动回收的
    yzbythesea
        6
    yzbythesea  
       2020-11-22 21:18:19 +08:00
    goroutinue 跑完了,就会自动回收。手动回收没听说过。
    better0332
        7
    better0332  
       2020-11-22 22:32:57 +08:00
    会自动回收,大量分配内存可以用 sync.Pool
    labulaka521
        8
    labulaka521  
       2020-11-23 12:08:23 +08:00 via iPhone
    sync pool
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:05 · PVG 06:05 · LAX 14:05 · JFK 17:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.