关于golang频繁创建大量对象的gc问题

对gc的压力肯定会有。
改进的方法就是使用sync.Pool。
对于你描述的场景,需要两个sync.Pool,一个用于接收消息的bytes.Buffer,一个是反序列化之后存储的对象。
import ( "bytes" "sync")var bp sync.Poolfunc init() { bp.New = func() interface{} { return \u0026amp;bytes.Buffer{} }}func bufferPoolGet() *bytes.Buffer { return bp.Get().(*bytes.Buffer)}func bufferPoolPut(b *bytes.Buffer) { bp.Put(b)}

■网友
使用sync.pool 做缓冲对象池,绝对有效
■网友
一定有压力,重点是目前的压力值不值得去优化。可以观察一下CPU 内存信息 应用负载情况 go的gc日志信息 有有这些数据再考虑也不急

■网友
可以尝试使用对象池,减少创建对象的开销
Golang 通用对象池

■网友
泻药
1.如此大量频繁地创建对象,会不会对gc形成压力?
肯定会
2.目前版本的golang(1.8)的gc对这种情况有很好的处理吗?
目前来说GC满足大多数GC的需求,如果你允许10ms左右的延迟,并接受较高的CPU占用
3.如果需要自己处理这个问题有没有什么解决办法?
【关于golang频繁创建大量对象的gc问题】 减少对象的创建和销毁,通过:合并对象,复用对象。


    推荐阅读