garbage-collectionmemory-leak

garbage collection과 memory leak을 설명해 주세요

예상 시간
7
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

도달 가능성(reachability)이란?

부가 설명

GC의 기준은 "의미상 필요한가"가 아니라 "root에서 도달 가능한가"입니다. 개발자가 보기에는 더 이상 쓰지 않는 데이터라도 어딘가에서 참조가 남아 있으면 살아 있는 객체로 취급됩니다.

const cache = [];
 
function remember(value) {
  cache.push(value);
}

이런 cache가 계속 커지고 비워지지 않으면 내부 값들은 계속 도달 가능한 상태로 남습니다. 언어가 메모리 회수를 자동으로 해도, 오래 사는 참조 구조를 만들면 누수는 생길 수 있습니다.

GC는 수동 메모리 관리보다 dangling pointer나 double free 위험을 줄입니다. 대신 객체 그래프를 추적하고 회수하는 비용이 있고, 런타임에 따라 pause나 예측하기 어려운 지연이 생길 수 있습니다.

한 줄 정리

GC는 도달 불가능한 객체를 회수하지만, 불필요한 참조가 남아 있으면 자동 메모리 관리 환경에서도 누수는 생깁니다.