一、内存分配
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)
八、总结
探究避发生的事情对于在程序设计中避入情;然而:“内存泄漏在于编程习惯,不仅是算法问题”。

发表评论 取消回复