Tag Archives: Go

Go 언어의 GC에 대해

안녕하세요, LINE Ads Platform 개발을 담당하고 있는 Okada(@ocadaruma)입니다. 이번 포스팅에서는 개인적으로 쭉 관심있었던 Go 언어의 가비지 컬렉션(Garbage Collection, GC)에 대해 조사한 내용을 소개하겠습니다.

Go 언어

Go 언어는 Google에서 개발한 시스템 프로그래밍 언어입니다. Channel을 통해 동시성(concurrency)을 지원하고 GC를 제공한다는 점이 특징입니다. Google을 비롯한 많은 기업에서 사용하고 있으며, LINE에서도 Go로 개발하는 도구나 서비스가 많이 있습니다.

Go 언어의 GC

Go 언어를 사용하면 low-latency 애플리케이션을 쉽게 개발할 수 있습니다. 하지만 솔직히 GC는 다른 언어의 runtime GC에 비해 단순해 보입니다. 예를 들어 Go 언어(Go 1.10 기준)의 GC는 Concurrent Mark & Sweep(이하 CMS라 함) 컬렉터이고, JVM(Java Virtual Machine) 등에서 수행하는 일반적인 압축(compaction)이나 세대별 GC(Generational GC)를 수행하지 않습니다.

It is a concurrent mark and sweep that uses a write barrier. It is non-generational and non-compacting.
mgc.go 발췌