golang的内存泄漏分析


本文摘自网络,作者,侵删。

golang的内存泄漏分析

什么是内存泄漏

内存泄漏说白了就是分配的内存(或者变量)不再使用,但是并没有被gc回收,而是继续占用内存

内存泄漏场景

substring

  • 案例

    var s0 string // 包级别变量
    // A demo purpose function.
    func f(s1 string) {
      s0 = s1[:50]
      //s0 和 s1 共用相同的底层memory block
      // 尽管 s1 不再使用,但是 s0仍然存活状态
      // 所以s1 的内存不会被回收,尽管只有 50 byte内存
      // 被使用,但是其他内存都泄漏了。
    }
    func demo() {
      s := createStringWithLengthOnHeap(1 << 20) // 1M bytes
      f(s)
    }
    //可以用如下方式来避免
    func f(s1 string) {
      s0 = string([]byte(s1[:50]))
    }
    

卡住的或没结束的goroutine

没用且没stop的定时器

time.Ticker 应该被stop,当不再使用时候

io读写流未close

  • 案例

    func main() {
     num := 6
     for index := 0; index < num; index++ {
          resp, _ := http.Get("https://www.baidu.com")
          _, _ = ioutil.ReadAll(resp.Body)
     }
     fmt.Printf("此时goroutine个数= %d\n", runtime.NumGoroutine())
    }
    

    没有执行resp.Body.Close(),内存是肯定会泄漏,而且一共泄漏三个goroutine,一读一写一主(main)


本文来自:简书

感谢作者:我是不会赢的

查看原文:golang的内存泄漏分析

相关阅读 >>

聊聊Gost的countwatch

Golang主要开发什么?

Go语言数组

舍弃python+c,salesforce将企业级软件全面迁移到Go语言

手撸Golang Go与微服务 net.rpc

Golang如何实现收发邮件?

你知道Go程序的基本要素吗

Golang slice如何拷贝

聊聊storagetapper的pool

手撸Golang Go与微服务 chatserver之4 内存泄漏

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...