文档章节

Go性能优化技巧2/10

w
 wangdy
发布于 2016/07/12 13:45
字数 322
阅读 18
收藏 0

对于一些初学者,自知道 Go 里面的 array 以 pass-by-value 方式传递后,就莫名地引起 “恐慌”。外加诸多文章未作说明,就建议用 slice 代替 array,企图避免数据拷贝,提升性能。实际上,此做法有待商榷。某些时候怕会适得其反,倒造成不必要的性能损失。

用个简单的示例说明。

示例

代码很简单,两个函数分别返回 “内容相同” 的 array 和 slice。为避免编译器优化,特填充了全部数据,以模拟 “真实” 数据复制行为。接下来,看看性能测试对比。

性能

bench result

这结果怕是颠覆了最初认知。array 非但拥有更好的性能,还避免了堆内存分配,也就是说减轻了 GC 压力。为什么会这样?

熟悉汇编的,怕是很容易看出来。函数 array 返回值的复制只需用 "CX + REP" 指令就可完成。

asm1

整个 array 函数完全在栈上完成,而 slice 函数则需执行 makeslice,继而在堆上分配内存,这就是问题所在。

asm2

对于一些短小的对象,复制成本远小于在堆上分配和回收操作。

Go Proverbs: A little copying is better than a little dependency.

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

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

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

京牛教育科技
2016/08/26
40
0
思途|Java就业培训之优化Java性能的10个技巧

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

思途科技在线
2017/12/15
0
0
Unity优化百科(UWA 博客目录)

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

UWA4D
2017/10/26
0
0
Padded优化LinkedTransferQue并发性能是错误方向

在Grizzly中,自带了LinkedTransferQueue,和JDK 7自带的LinkedTransferQueue有所不同,不同之处就是使用PaddedAtomicReference来提升并发性能,其实这是一种错误的编码技巧,没有意义! At...

wenshao
2012/11/20
4K
22
年薪:8-10万学历不限招高级工程师

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

JavaGG
2012/04/19
3.1K
14

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
12分钟前
4
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
23分钟前
3
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
23分钟前
4
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
48分钟前
5
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
58分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部