关于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问题】 减少对象的创建和销毁,通过:合并对象,复用对象。
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- 软件公司为啥频繁地在培训机构批量招人
- 关于微信小程序的思考:运营者该何去何从
- 关于人工智能虚拟人的一些问题
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 写下我关于做数据分析专员的困惑和各位的建议是
