【golang】重视内存复用
2020-07-06 本文已影响0人
dongzd
在性能优化中,内存复用能减少内存申请与释放,提高性能,尤其在大量数据的重复声明中。在golang的内存复用有很多方法,重点在于怎么样避免新建对象,下面介绍简单但作用明显的复用方式:
sync.pool的内存复用,常用于结构体对象复用
type User struct {
Name string
}
func (u User)Reset(){
u.Name = ""
}
var userPool = &sync.Pool{
New: func() interface{} {
return &User{}
},
}
func GetUser() *User {
return userPool.Get().(*User)
}
func PutUser(u *User) {
u.Reset()
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)
}