Go 1.26の新GC「Green Tea」ヒープ動作を詳解

원제: Watching Go's new garbage collector move through the heap

왜 중요한가

Go의 기본 GC가 Green Tea로 전환됨에 따라, 서버 워크로드에서의 메모리 성능 특성이 변화하며 Go 기반 인프라 설계에 영향을 미칠 수 있다.

Go 1.26でデフォルトGCとなった「Green Tea」について、ソフトウェアエンジニアのPhil Eaton氏が2026年7月19日に詳細な技術分析を公開した。perf툴을 사용한 캐시 친화성 측정, 힙 시각화, 그리고 비이동형 GC 특유의 희소 페이지 문제를 구체적인 코드와 함께 설명했다.

Go 1.25에서 도입된 새로운 가비지 컬렉터 「Green Tea」는 Go 1.26에서 기본 GC로 채택되었다. Phil Eaton 씨는 이 GC의 동작을 실제 코드로 관찰하는 방법을 상세히 소개했다.

Go는 동일한 크기 클래스의 객체를 연속된 청크(스팬, 8KiB 페이지 단위)에 할당하는 크기 분리 할당 방식을 채택하고 있다. 이는 tcmalloc에서 유래한 구조다. Green Tea는 이 구조를 활용하여 캐시 친화적인 GC를 실현한다.

기사에서는 Small(32바이트), Medium(64바이트), Large(128바이트) 3종류의 객체를 무작위로 100개 할당하고, 힙 주소를 시각화하는 Go 및 C# 코드를 제시했다. `perf` 툴을 통해 캐시 미스 횟수를 측정하여 Green Tea의 효과를 정량적으로 확인하는 방법도 소개했다.

또한 Green Tea가 효과를 발휘하지 못하는 케이스도 다루었다. Go의 GC는 비이동형(non-moving) 컬렉터이기 때문에, 라이브 객체가 힙 전체에 희소하게 분산된 경우 빈 페이지를 회수하지 못하는 문제가 발생한다. 이 「희소 페이지 문제」는 Go GC의 고질적인 약점으로 지적되어 왔으며, Green Tea로도 근본적인 해결은 이루어지지 않았다고 설명했다.

출처

theconsensus.dev — 원문 읽기 →