在性能优化中,内存复用能减少内存申请与释放,提高性能,尤其在大量数据的重复声明中。在golang的内存复用有很多方法,重点在于怎么样避免新建对象,下面介绍简单但作用明显的复用方式:
sync.pool的内存复用,常用于结构体对象复用
type User struct {
Name string
}
var userPool = &sync.Pool{
New: func() interface{} {
return &User{}
},
}
func GetUser() *User {
return userPool.Get().(*User)
}
func PutUser(u *User) {
userPool.Put(u)
}
切片的内存复用
type User struct {
Name string
Location []string
}
// 减少内存分配,下次复用
func (u *User) ResetNew() {
u.Location = u.Location[:0]
}
// 重新申明
func (u *User) ResetOld() {
u.Location = make([]string, 0)
}
有疑问加站长微信联系(非本文作者)