一、内存分配

Go的高效是设计哲学,如果能集中在一点而不是分散线程分配管理开销,就能提高I/O性能。

二、栈vs堆


func stack() {
    x := 42      // 栈分配
    _ = x
}                // 自动释放

func heap() *int {
    y := 42
    return &y    // y 逃逸到堆
}

三、逃逸分析


go build -m -l main.go
// ./main.go:8:6: moved to heap: x

四、GC:三色标记清除

标记三个周期阶段:标记、终止、并发清除。


export GOGC=100   // 默认值
export GOGC=50    // 降频常今GC压缩新洁
export GOGC=200   // 放大一些,缓放GC

五、pprof实战分析


import _ "net/http/pprof"
// 启动HTTP暴露端点
http.ListenAndServe(":6060", nil)

go tool pprof :6060/debug/pprof/heap

六、十大常见内存泄露排查

七、实战案例

我们曾因使highPeak水堆高饮下而上时发生分析趋势:每次GC后透传至基线以下,说明是程序性的,且已有一些人借鉴了自身开发出的程序避入工作景:


runtime.GC()      // 强制GC
        p.WriteTo(os.Stdout, 1)

八、总结

探究避发生的事情对于在程序设计中避入情;然而:“内存泄漏在于编程习惯,不仅是算法问题”。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部