栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中最小化垃圾回收?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Go中最小化垃圾回收?

避免垃圾相对简单。您需要了解在哪里进行分配,并查看是否可以避免分配。

首先,在函数开头声明变量将无济于事。编译器不知道区别。但是,人类会知道其中的区别,并且会惹恼他们。

使用数组而不是切片将是可行的,但这是因为将数组(除非取消引用)放置在堆栈中。数组还有其他问题,例如在函数之间按值(复制)传递数组。堆栈上的所有内容都不是“垃圾”,因为当函数返回时它将被释放。任何可能逃避该函数的指针或切片都会放在堆上,垃圾回收器必须在某些时候处理该堆。

您可以做的最好的事情就是避免分配。用完不需要的大量数据后,请重新使用它们。这是Go博客上的性能分析教程中使用的方法。我建议阅读。

除了概要分析教程中的示例外,还有另一个示例:假设您有一个

[]int
名为的类型切片
xs
。您将不断添加到,
[]int
直到达到条件,然后将其重置,以便重新开始。如果这样做
xs= nil
,则现在将切片的基础数组声明为要收集的垃圾。然后,Append将在您下次使用它时重新分配xs。相反
xs =xs[:0]
,如果您这样做,则仍在重置它,但保留旧数组。

在大多数情况下,避免产生垃圾是过早的优化。对于大多数代码而言,这无关紧要。但是您可能偶尔会发现一个函数,该函数被调用很多次,每次运行时分配很多。或者是一个循环,您可以重新分配而不是重复使用。我会等到你看到瓶颈后再着手。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号