文档章节

Go 性能优化技巧 3/10

w
 wangdy
发布于 2016/07/12 14:03
字数 413
阅读 9
收藏 0

内置 map 类型是必须的。首先,该类型使用频率很高;其次,可借助 runtime 实现深层次优化(比如说字符串转换,以及 GC 扫描等)。可尽管如此,也不意味着万事大吉,依旧有很多需特别注意的地方。

1、预设容量

map 会按需扩张,但须付出数据拷贝和重新哈希成本。如有可能,应尽可能预设足够容量空间,避免此类行为发生。

预设容量 结果

从结果看,预设容量的 map 显然性能更好,更极大减少了堆内存分配次数。

2、直接存储

对于小对象,直接将数据交由 map 保存,远比用指针高效。这不但减少了堆内存分配,关键还在于垃圾回收器不会扫描非指针类型 key/value 对象。

写个示例对比一下,注意调整 33 行的函数调用。

直接存储

指针模式:

指针模式

值模式:

从两次输出里 GC 所占时间百分比,就可看出 “巨大” 差异。

内置 map 类型是必须的。首先,该类型使用频率很高;其次 notice

3、空间收缩

很遗憾,map 不会收缩 “不再使用” 的空间。就算把所有键值删除,它依然保留内存空间以待后用。

空间收缩 result1

就算清空了所有数据,空间依旧没有释放。解决方法是取消 23 行注释,或者替换为一个新的 map 对象。

result2

提示:如长期使用 map 对象(比如用作 cache 容器),偶尔换成 “新的” 或许会更好。还有,int key 要比 string key 更快。

本文转载自:http://studygolang.com/topics/1682

w
粉丝 8
博文 185
码字总数 115352
作品 0
闵行
后端工程师
私信 提问
PHP性能优化的小技巧

今天我们来分享10条PHP性能优化的小技巧: (1)循环内部不要声明变量,尤其是对象这样的变量 (2)foreach效率更高,尽量用foreach代替while和for循环 (3)在多重嵌套循环中,如有可能,应当将最...

京牛教育科技
2016/08/26
33
0
Unity优化百科(UWA 博客目录)

原文链接:https://blog.uwa4d.com/archives/Index.html Hello, 各位Unity开发者,无论您是正用着UWA的工具、还是阅读着UWA的相关技术文章亦或是在UWA博客中寻找一个问题的解答,我们都倍感荣...

UWA4D
2017/10/26
0
0
年薪:8-10万学历不限招高级工程师

北京神州立诚科技有限公司(广州公司) Novell中国区盒装产品总代理 EnterpriseDB大中华区总代理(包括港澳台) 公司网址:http://www.focus-soft.com 工作职位:高级工程师 工作范围: 负责软件...

JavaGG
2012/04/19
3.1K
14
25条提高iOS App性能的技巧和诀窍

这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or follow him on Twitter.原文地址 当我们开发iOS应用时,好的性能对我...

mahb520
2015/01/17
0
0
思途|Java就业培训之优化Java性能的10个技巧

很多人都理所当然的以为性能优化是一件复杂且深奥的事情,需要具备丰富经验和知识前提;可实际上,虽然这事儿不算简单,但也并不代表你不了解这些知识就不能做任何事情。下面,我们会分享给大...

思途科技在线
2017/12/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我最喜欢的Mybatis 3.5新特性——Optional支持

Mybatis 3.5 发布有段时间了,终于支持了 Optional ,这么实用的特性,竟然还没人安利……于是本文出现了。 文章比较简单,但非常实用,因为能大量简化恶心的判空代码。 WARNING 由于本文非常...

周立_ITMuch
27分钟前
6
0
Android 开发工具推荐

简评: 自己过去在 Android 开发中发现的好工具,在这里分享给大家。: ) Library methods count 每一个 Android App 的开发中都会用到很多的库,这个工具能够让你看到不同库的大小和,帮助你...

极光推送
28分钟前
0
0
高并发解决方案

我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100...

孤狼悲月
34分钟前
1
0
Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署

本文首发于:Jenkins 中文社区 渐进式交付是持续交付的下一步, 它将新版本部署到用户的一个子集,并在将其滚动到全部用户之前对其正确性和性能进行评估, 如果不匹配某些关键指标,则进行回...

Jenkins中文社区
38分钟前
5
0
大数据辟谣:布洛芬用药不慎可能致死?如此标题党居心何在

相信很多人看到一则“布洛芬用药不慎可能致死”的消息后,内心开始慌乱了。 (新闻来源:微博热搜排行榜) 毕竟健康是每一个人最关注的话题,而布洛芬也是很多人止痛(发烧头痛、喉咙痛、牙痛...

forespider
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部