Ruby는 더 이상 참조되지 않는 객체를 회수하는 **가비지 컬렉터(GC)**를 통해 메모리를 자동으로 관리합니다. 현대 Ruby(MRI)는 압축(compaction)을 갖춘 세대별(generational), 점진적(incremental) mark-and-sweep 컬렉터를 사용합니다. 이를 이해하면 성능과 장기 실행 애플리케이션의 메모리 문제 진단에 도움이 됩니다.
자동 가비지 컬렉션
Ruby는 객체를 힙에 할당하고; GC는 더 이상 도달 가능(참조됨)하지 않은 것을 회수함
. 수동으로 메모리를 해제하지 않음.
현대 MRI GC 특성:
✓ Mark-and-sweep — (루트에서) 도달 가능한 객체를 표시, 도달 불가능한 것을 쓸어냄
✓ 세대별 (Ruby 2.1부터) — 새 객체는 자주, 오래된 것은 드물게 수집
("대부분의 객체는 일찍 죽는다"에 기반)
✓ 점진적 — GC 작업을 분산해 일시정지(pause) 시간 감소
✓ 압축 (GC.compact, Ruby 2.7+) — 메모리 단편화 감소
GC는 수동 메모리 관리에서 해방시켜 줍니다. 접근(어린 객체를 자주 저렴하게, 오래된 것을 드물게 수집)은 효율적으로 만들고, 점진적 수집은 일시정지를 줄입니다.
