gpt4 book ai didi

garbage-collection - 如何最小化 Go 中的垃圾收集?

转载 作者:IT老高 更新时间:2023-10-28 13:01:44 27 4
gpt4 key购买 nike

有时您可能希望避免/最小化垃圾收集器,所以我想确定如何去做。

我认为下一个是正确的:

  • 在函数开头声明变量。
  • 使用数组代替 slice 。

还有吗?

最佳答案

要最小化 Go 中的垃圾收集,您必须最小化堆分配。为了尽量减少堆分配,您必须了解分配发生的时间。

以下事情总是会导致分配(至少在 Go 1 的 gc 编译器中):

  • 使用 new 内置函数
  • 使用 make 内置函数(少数不太可能的极端情况除外)
  • 当值类型是 slice 、映射或带有 & 运算符的结构时的复合文字
  • 将大于机器字的值放入接口(interface)。 (例如,字符串、 slice 和某些结构比机器字大。)
  • string[]byte[]rune 之间的转换
    • 从 Go 1.3 开始,编译器特例不分配此表达式:m[string(b)],其中 m 是映射,b 是一个 []byte
  • 将非常量整数值转换为字符串
  • defer 语句
  • go 语句
  • 捕获局部变量的函数字面量

以下情况可能导致分配,具体取决于详细信息:

  • 获取变量的地址。请注意,可以隐式获取地址。例如,如果 a 不是指针且 b 方法,则 a.b() 可能会采用 a 的地址有一个指针接收器类型。
  • 使用 append 内置函数
  • 调用可变参数函数或方法
  • 对数组进行 slice
  • 向 map 添加元素

该列表旨在完整,我对此充满信心,但很高兴考虑添加或更正。

如果您不确定分配发生在哪里,您始终可以按照其他人的建议进行概要分析或查看编译器生成的程序集。

关于garbage-collection - 如何最小化 Go 中的垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12277426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com