고성능 가비지 컬렉션 (GC)을 위한 언어 설계 관점
Source
Evernote/Technote scraps/Garbage collection thoughts A Random Walk Through Geek-Space.md
Summary
저자는 현대의 고성능 고수준 언어가 부족하다고 지적하며, 가비지 컬렉션(GC)이 생산성과 안전성을 해치지 않으면서도 고성능으로 구현될 수 있다고 주장한다. 이를 위해 세 가지 핵심 최적화 전략을 제시한다: 1) 할당 수 최소화: C#/Java처럼 힙 할당을 장려하기보다, C++/Rust처럼 데이터는 인플레이스(in-place)나 스택에 저장하고 힙 할당은 최소화해야 한다. 2) 고유 소유권(Unique Ownership) 활용: 공유되지 않는 객체는 고유 포인터로 관리하여 RC 오버헤드를 없애거나 트레싱 수집기의 탐색을 조기에 중단시킨다. 3) 스레드별 격리된 GC: GC 힙 할당을 스레드 간에 전달하지 않고 격리하면, 전역 ‘Stop-the-World’ 없이 개별 스레드 단위로 효율적인 수집과 컴팩팅이 가능하다. 이는 외부 단편화 문제와 함께 고려해야 할 설계 방향이다.
Key Points
- 기존 C#/Java는 과도한 힙 할당으로 GC 부하가 크며, C++/Rust의 인플레이스/스택 할당 선호가 더 효율적이다.
- 고유 소유권(Unique Ownership)은 참조 카운팅 오버헤드 제거 및 트레싱 수집기 성능 향상에 기여한다.
- GC 힙을 스레드별로 격리하면 전역 정지 없이 스레드 단위 ‘Stop-the-World’로 고성능 동시성 GC 효과를 낼 수 있다.
- 언어 설계 시 메모리 효율성을 우선시하고, 공유 힙 할당은 극히 제한적인 경우에만 사용해야 한다.