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的内存泄漏分析

相关阅读 >>

Golang中什么是接口

一周 Go world 新鲜事

10天入门Go语言教程- hello world

Golang recover后怎么返回

Golang 如何处理死锁

Golang怎么执行cmd命令行

Golang有类(class)吗?

Golang 如何读取csv文件

Golang实现二倍均值算法和抢红包的方法

easydss如何定制Go语言生成csv文件?

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




打赏

取消

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

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

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

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

评论

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