V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
theknotyouknow

golang 内存回收

  •  
  •   theknotyouknow · Nov 22, 2020 · 3037 views
    This topic created in 1994 days ago, the information mentioned may be changed or developed.
    现在有这样一个场景:
    每一个请求会启动一个 goroutine,每一个 goroutine 内会初始化一个大内存的数组来接收大量数据。
    当请求完成,这个 goroutine 内的数组会自动被回收吗,有性能瓶颈吗,怎样做是最好的方式呢
    8 replies    2020-11-23 12:08:23 +08:00
    wellsc
        1
    wellsc  
       Nov 22, 2020 via iPhone
    你可以手动回收
    janxin
        2
    janxin  
       Nov 22, 2020   ❤️ 1
    一般情况下会被回收,但是不是马上被归还给系统。这个需要根据你的开发和具体 runtime 调度决定。

    没有场景谈优化太粗暴了,基础策略是你可以用临时对象池 sync.Pool 减少反复内存分配。
    theknotyouknow
        3
    theknotyouknow  
    OP
       Nov 22, 2020
    @wellsc 手动回收,是指直接将这个大数组设置成 nil 吗
    theknotyouknow
        4
    theknotyouknow  
    OP
       Nov 22, 2020
    @janxin 这个数组每次接收的数据都不一样,你是指用 sync.Pool 直接覆盖掉上一次对象的值吗
    lhx2008
        5
    lhx2008  
       Nov 22, 2020 via Android
    和 java 差不多,没人用会定期自动回收的
    yzbythesea
        6
    yzbythesea  
       Nov 22, 2020
    goroutinue 跑完了,就会自动回收。手动回收没听说过。
    better0332
        7
    better0332  
       Nov 22, 2020
    会自动回收,大量分配内存可以用 sync.Pool
    labulaka521
        8
    labulaka521  
       Nov 23, 2020 via iPhone
    sync pool
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1364 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 17:23 · PVG 01:23 · LAX 10:23 · JFK 13:23
    ♥ Do have faith in what you're doing.