最新

tech

【译】 Go Action:如何避免因为大堆产生的高GC开销

原文:Avoiding high GC overhead with large heaps 当分配的内存量相对较小时,Go垃圾收集器 (GC) 工作得非常好,但是如果堆的大小较大,GC过程可能会消耗大量 的CPU。在极端情况下,它甚至可能无法完成任务(GC算法保证GC不会使用超过50%的CPU时间,如果超过这阈值,会导致内存泄露)。 有什么问题? GC的工作是确定哪些内存块可被释放,它通过扫描内存中分配的指针来完成这一任务。简单来说,如果没有指针指向某个内存分配,则可释放该内存分配。这种方法非常有效,但需要扫描的内存越多,所需时间就越长。 这是一个大问题吗? 有多严重?我们来揭晓!以下是 demonstrate 的小程序。我们分配 1e9 个 8 字节指针,即约 8GB 的内存。我们强制执行 GC,并测量它需要多长时间。我们会重复几次以获得一个稳定的值。还调用 runtime.

By huizhou92