在 Go 语言中,内存分配由 runtime 的 mheap 和 mcache 共同完成。mheap 是全局堆,负责大对象和整体管理,而 mcache 是每个 P(逻辑处理器)的局部分配缓存,用于小对象的快速分配。这样可以减少全局锁竞争,提高并发效率。Go 还引入了 对象池化(sync.Pool) 来降低 GC 压力。
核心点:
sync.Pool 适合高频复用对象,避免频繁分配与回收。示例代码:
package main
import (
"fmt"
"sync"
)
var bufPool = sync.Pool{
New: func() interface{} {
return make([]byte, 1024)
},
}
func main() {
buf := bufPool.Get().([]byte)
copy(buf, []byte("hello pool"))
fmt.Println(string(buf[:11]))
bufPool.Put(buf)
}运行时不会频繁分配新内存,而是从池中取出复用,降低 GC 压力。