본문 바로가기
카테고리 없음

가비지 컬렉션(GC)은 어떻게 메모리를 정리할까

by by_merry 2026. 5. 9.

컴퓨터 관련 내용을 공부하다 보면 “메모리를 자동으로 관리해준다”는 말을 자주 보게 된다. 처음에는 이게 그냥 편리한 기능 정도로만 느껴졌다. 그런데 힙 메모리와 스택 메모리 개념을 이해하고 나니까 자연스럽게 궁금해졌다. “그럼 사용이 끝난 메모리는 누가 치우는 거지?” 나도 예전에는 프로그램을 종료하면 메모리가 그냥 자동으로 전부 정리되는 줄 알았다. 하지만 실제로는 프로그램이 실행되는 도중에도 계속 메모리를 정리하는 과정이 필요했고, 그 역할을 하는 게 바로 가비지 컬렉션(GC)이었다.

 

가비지 컬렉션은 더 이상 사용하지 않는 메모리를 자동으로 정리한다

가비지 컬렉션의 가장 핵심적인 역할은 “더 이상 사용하지 않는 객체를 찾아 메모리를 회수하는 것”이다. 특히 힙 메모리에 저장된 데이터들은 사용이 끝났다고 자동으로 사라지지 않는다. 그래서 사용하지 않는 객체들이 계속 남아 있으면 메모리가 점점 낭비된다.

예를 들어 프로그램에서 어떤 객체를 생성한 뒤, 이후에 그 객체를 참조하는 코드가 하나도 없다고 가정해보자. 사람 입장에서는 이미 필요 없는 데이터지만, 컴퓨터 입장에서는 “정말 안 쓰는 건지” 확인해야 한다. 그래서 GC는 메모리를 계속 검사하면서 더 이상 연결되지 않은 객체를 찾는다.

나도 이걸 체감한 적이 있다. 예전에 브라우저 탭을 엄청 많이 열어놓고 작업하다가 갑자기 전체적으로 버벅이는 경험을 한 적이 있었다. 처음에는 인터넷 문제인 줄 알았는데, 작업 관리자에서 메모리 사용량이 비정상적으로 올라가 있는 걸 보고 좀 놀랐다. 나중에 개발 관련 글들을 찾아보니까, 사용하지 않는 객체들이 계속 남아 있거나 GC가 한 번에 크게 동작하면서 순간적으로 성능 저하가 발생하는 경우가 있다고 했다.

그때 처음으로 “메모리를 자동으로 관리한다”는 게 단순한 편의 기능이 아니라, 실제 프로그램 성능과 연결된 중요한 구조라는 걸 느꼈다.

GC는 편리하지만 실행될 때 성능 비용이 발생한다

처음 GC를 알게 되면 대부분 “자동으로 메모리 정리해주면 무조건 좋은 거 아닌가?”라고 생각하게 된다. 나도 그랬다. 실제로 JavaScript나 Python 같은 언어에서는 메모리를 직접 해제하지 않아도 되기 때문에 개발이 훨씬 편해진다.

하지만 세상에 공짜는 없다는 말처럼, 자동 관리에도 비용이 존재한다. GC는 사용하지 않는 객체를 찾기 위해 메모리를 검사해야 하고, 이 과정에서 CPU 자원을 사용한다. 경우에 따라서는 프로그램 실행이 잠시 멈추는 현상도 발생한다.

특히 예전에 간단한 웹 프로젝트를 만들면서, 특정 순간마다 화면이 잠깐 끊기는 느낌을 받은 적이 있었다. 처음에는 렌더링 문제인 줄 알았는데, 브라우저 개발자 도구를 확인해보니까 메모리 정리 작업이 실행되고 있었다. 그때 “아, 자동 정리도 결국 내부에서는 꽤 무거운 작업이구나”라는 걸 체감했다.

이 현상을 흔히 “Stop The World”라고 부른다. 이름은 조금 무섭게 들리지만, 실제로는 GC가 실행되는 동안 다른 작업이 잠시 멈추는 상황을 의미한다.

그래서 GC는 단순히 “편리한 기능” 정도가 아니라, 성능과도 굉장히 밀접하게 연결된 시스템이다.

최신 GC는 성능 문제를 줄이기 위해 계속 발전하고 있다

예전의 GC는 메모리 전체를 한 번에 검사하는 경우가 많았다. 그래서 프로그램이 순간적으로 크게 멈추는 일이 자주 발생했다. 하지만 최근에는 이런 문제를 줄이기 위해 다양한 방식이 사용되고 있다.

대표적으로는:

  • 금방 사라지는 객체와 오래 살아남는 객체를 따로 관리
  • 전체를 한 번에 검사하지 않고 나눠서 처리
  • 프로그램 실행 중간중간 조금씩 정리 수행

같은 방식들이 있다.

이걸 공부하면서 느낀 건, 우리가 평소 당연하게 사용하는 프로그램들도 내부에서는 엄청 많은 최적화 과정을 거치고 있다는 점이었다. 예전에는 그냥 “컴퓨터가 좋아져서 빨라졌겠지” 정도로 생각했는데, 실제로는 이런 메모리 관리 기술들도 성능 향상에 굉장히 큰 역할을 하고 있었다.

특히 브라우저처럼 실시간 반응이 중요한 프로그램에서는 GC 성능 차이가 체감적으로도 꽤 크게 느껴진다. 결국 최신 언어나 런타임들이 계속 GC 구조를 개선하는 이유도, 사용자 경험과 직결되기 때문이라는 생각이 들었다.

한 줄로 정리하면 가비지 컬렉션은 더 이상 사용하지 않는 객체를 자동으로 찾아 메모리를 회수하는 시스템이며, 개발 편의성을 높여주지만 실행 과정에서 성능 비용도 함께 발생하는 중요한 메모리 관리 구조다.