【golang】重视内存复用

     在性能优化中,内存复用能减少内存申请与释放,提高性能,尤其在大量数据的重复声明中。在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)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容