首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >goroutine记忆泄漏

goroutine记忆泄漏
EN

Stack Overflow用户
提问于 2016-01-15 13:16:21
回答 1查看 2.8K关注 0票数 2

我不明白为什么内存不被释放。内存配置文件显示runtime.malg使用的几乎所有内存。如果我在DoSomeWork中移除通道上的范围,一切都可以正常工作。

这里是fmt.Println的输出:

代码语言:javascript
复制
Memory Acquired:  4196600
Memory Used    :  745192

Memory Acquired:  2651299576
Memory Used    :  393923440

源代码:

代码语言:javascript
复制
func DoSomeWork(work chan int) {
    for _ = range work {
    }
}

func main() {
    k := make(chan int)
    m := &runtime.MemStats{}
    runtime.ReadMemStats(m)
    fmt.Println("Memory Acquired: ", m.Sys)
    fmt.Println("Memory Used    : ", m.Alloc)

    wg := new(sync.WaitGroup)
    // generate a lot of goroutines that reads from channel
    for i:=0;i<1000000;i++ {
        wg.Add(1)
        go func() {
            DoSomeWork(k)
            wg.Done()
        }()
    }

    close(k)
    wg.Wait()

    // make GC
    runtime.GC()

    // show memory after garbage collector
    runtime.ReadMemStats(m)
    fmt.Println("Memory Acquired: ", m.Sys)
    fmt.Println("Memory Used    : ", m.Alloc)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-15 18:05:34

您的代码中没有内存泄漏。然而,您确实会导致大量内存被保留,这就是您所看到的。

当我寻找任何泄漏时,我宁愿多做一次测试。这很容易用您的代码完成。只需添加:

代码语言:javascript
复制
func init(){
    for{
        main()
    }
}

新的输出将显示在运行过程中内存没有丢失:

代码语言:javascript
复制
Memory Acquired:  2885880
Memory Used    :  14848
Memory Acquired:  2594885728
Memory Used    :  297108312
Memory Acquired:  2594885728
Memory Used    :  297108984
Memory Acquired:  2624143456
Memory Used    :  297108312
Memory Acquired:  2624143456
Memory Used    :  297108984
Memory Acquired:  2624143456
Memory Used    :  297108312
Memory Acquired:  2624143456
Memory Used    :  297108984
Memory Acquired:  2624143456
Memory Used    :  297108312
Memory Acquired:  2624143456
Memory Used    :  297108984
Memory Acquired:  2624143456
Memory Used    :  297108312
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34811933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档