【问题标题】:Go garbage collector overhead with minimal allocations?以最少的分配去垃圾收集器开销?
【发布时间】:2018-10-21 10:42:51
【问题描述】:

人们普遍认为,阻碍 Go 回退 C++ 级别性能的主要因素之一是垃圾收集器。我想获得一些直觉来帮助推理 Go 的 GC 在不同情况下的开销。例如,如果一个程序从不接触堆,或者只是在设置时分配一个大块用作具有自我管理的对象池,那么是否存在非平凡的 GC 开销?是每 x 秒调用一次 GC,还是在每次分配时调用一次?

作为一个相关问题:我最初的假设是正确的,即 Go 的 GC 是 C++ 级性能的主要障碍,还是 Go 的某些事情做得更慢?

【问题讨论】:

    标签: go optimization garbage-collection


    【解决方案1】:

    Golang 中垃圾收集的暂停时间(停止世界)大约为几毫秒,或者在最近的 Golang 中更短。 (看 https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md)

    C++ does not have a garbage collector 所以这些停顿时间不会发生。但是,C++ 并不是魔术,如果要管理用于存储对象的内存,则必须进行内存管理。无论语言如何,内存管理仍在您的程序中的某个地方进行

    在 C++ 中使用静态内存块而不处理任何内存管理问题是一种方法。但是 Go 也可以做到这一点。有关如何在真正的高性能 Go 程序中完成此操作的概述,请观看此视频

    https://www.youtube.com/watch?time_continue=7&v=ZuQcbqYK0BY

    【讨论】:

    • 嘿,感谢您的回复——视频很有帮助。澄清一下,如果您的总分配量很少,您能否获得一个软保证,即您永远不会受到暂停时间的影响?
    猜你喜欢
    • 2011-01-17
    • 2011-10-12
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2019-02-01
    • 2012-04-20
    • 2023-03-07
    • 2018-12-30
    相关资源
    最近更新 更多