垃圾收集
你不止一次支付内存分配。第一个显然是你分配它的时候。但是,每次垃圾收集运行时,你也要付出代价。
减少回收再利用。 - @bboreham
- 堆栈与堆分配
- 什么导致堆分配?
- 了解逃逸分析(和当前的限制)
- /debug/pprof/heap和-base
- API设计限制分配:允许传入缓冲区,因此调用者可以重用而不是强制分配
- 你甚至可以在扫描时仔细修改切片
- 减少指针以减少gc扫描时间
- 无指针的map键
- GOGC
- 缓冲区重用(sync.Pool vs或通过go-slab等自定义)
- 切片与偏移量:当GC运行时指针写入需要writebarrier:https : //github.com/golang/go/commit/b85433975aedc2be2971093b6bbb0a7dc264c8fd
- 使用错误变量而不是errors.New()/ fmt.Errorf()在呼叫站点(性能或风格?接口需要指针,所以它转义为堆)
- 使用结构化的错误来减少分配(传递结构值),在错误打印时创建字符串
- 大小端