golang,一个map什么时候会发生gc?
如果一个map只发生自身key对应的value的修改或删除,会造成很大的gc吗?
这个map很大
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如果一个map只发生自身key对应的value的修改或删除,会造成很大的gc吗?
这个map很大
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
楼上研究很透彻,厉害,很多细节也是看了你的文章才知道,谢谢
其实这取决于这个map是什么样的map,以及你的go的版本,在go 1.4版本存在map gc的bug。具体细节可以参考我的这篇文章。
对于你的问题,在四种情况gc时间情况:
map[int32]*int32 即value为指针:
map[int32]int32 即value为对象引用:
将map分为多个小map(高性能map常用做法)
而使用slice代替map处理的话,即[]t
如果将
GOMAXPROCS
设置为4则结果如下:runtime.GOMAXPROCS(4)
map[int32]*int32 即value为指针:
map[int32]int32 即value为对象引用:
将map分为多个小map(高性能map常用做法)
而使用slice代替map处理的话,即[]t
可以得出结论,
gc
时间受到map存储的类型和CPU核心数目影响,当然也和硬件机器的性能有关。就上面的数据而言,slice的gc时间是远远快于map的,而map存储指针则是最慢的,不推荐。测试代码来自:http://play.golang.org/p/AeHS...
测试代码中的最初数据(作为参考):