【golang】性能优化

dongzaidong · 2020-04-16 03:32:42 · 886 次点击 · 预计阅读时间不到 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2020-04-16 03:32:42 的文章,其中的信息可能已经有所发展或是发生改变。

内存管理

在栈中创建对象比在堆中创建对象性能高,少用new来创建对象,多用object{}创建,如果需要创建大量相同临时对象,使用sync.pool减少gc压力。

原因:因为heap上的变量需要gc,而stack上的自动释放,如果在函数里面创建许多生命周期很短的heap变量,会不断触发gc。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:dongzaidong

查看原文:【golang】性能优化

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

886 次点击  
加入收藏 微博
1 回复  |  直到 2020-04-17 14:17:38
timerzz
timerzz · #1 · 5年之前

我觉得不是用不用new 的问题。而是什么情况下用值,什么情况下用指针。用new 创建返回的是对象指针,而object{}是对象本身

  1. 用new 创建对象效果等同&object{}。用new创建会比&object{},因为会自动内存对齐
  2. 不是所有的指针都会分配在heap上,这是编译器进行逃逸分析决定的。在四种情况下变量会分配在heap上:1 )指针逃逸 2)栈空间不足逃逸, 所以即使是对象object{},如果过大也会分配在heap上 3)动态类型逃逸 4)闭包引用对象逃逸
  3. 如果对象结构较为复杂,那么值复制时花的时间会比较长,即使分配在stack上,所花的时间也不一定比用指针短。所以什么时候用指针什么时候用值,是需要判断的。
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传