golang 编程笔记

【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)
}
上一篇下一篇

猜你喜欢

热点阅读