[JavaScript(11)] 가비지 컬렉션, 메모리는 언제 사라질까?

2026. 5. 31. 15:50·웹 개발/Javascript

 

 

안녕하세요~  경제적 자유입니다.

오늘은 JavaScript의 가비지 컬렉션(Garbage Collection)을 리뷰해보려고 합니다.

 

OverView


JavaScript로 코드를 작성하다 보면 객체, 배열, 함수 같은 값을 계속 만들게 됩니다.


그런데 우리가 만든 값들이 영원히 메모리에 남아 있다면 어떻게 될까요?

 

처음에는 괜찮아 보이지만, 사용하지 않는 값들이 계속 쌓이면 프로그램이 느려지거나 메모리를 많이 차지하게 됩니다.


그래서 JavaScript 엔진은 더 이상 사용할 수 없는 값을 자동으로 찾아서 정리합니다.

 

이 자동 정리 시스템을 가비지 컬렉션이라고 합니다.

 

추가로 더 자세히 공부하고 싶다면 아래 MDN 문서를 참고해보세요.

  • 참고 링크: https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Memory_management

 

 

개념 설명


 

 

1. 가비지 컬렉션이란?

가비지 컬렉션(Garbage Collection) 이란 JavaScript 엔진이 더 이상 사용할 수 없는 값을 찾아서 메모리에서 자동으로 정리하는 과정입니다.

 

JavaScript에서는 객체, 배열, 함수 등을 만들면 메모리를 사용합니다.

let 사람 = {
  name: "상구"
};

 

위 코드에서 { name: "상구" }라는 객체가 만들어지고, 이 객체는 메모리 어딘가에 저장됩니다.

 

그리고 변수 사람이 그 객체를 참조하고 있습니다.

 

즉, 현재 상태는 이렇게 이해할 수 있습니다.

사람  --->  { name: "상구" }

 

이 객체는 사람이라는 변수를 통해 접근할 수 있기 때문에 아직 필요한 값입니다.

 

그래서 가비지 컬렉터는 이 객체를 지우지 않습니다.

 

 


 

2. 도달 가능성이란?

 

 

도달 가능성(reachability)이란 쉽게 말해, 현재 실행 중인 코드에서 어떤 값에 접근할 수 있는가? 를 의미합니다.

 

도달 가능한 값

아래 객체는 도달 가능합니다.

let 사람 = {
  name: "상구"
};

console.log(사람.name);

 

사람이라는 변수를 통해 객체에 접근할 수 있기 때문입니다.

사람  --->  { name: "상구" }

 

이 객체는 아직 사용할 수 있으므로 메모리에서 정리되지 않습니다.

도달 불가능한 값

let 사람 = {
  name: "상구"
};

사람 = null;

 

처음에는 사람 변수가 객체를 참조하고 있었습니다.

사람  --->  { name: "상구" }

 

그런데 사람 = null 이후에는 더 이상 그 객체를 가리키는 변수가 없습니다.

사람  --->  null

{ name: "상구" } // 접근 불가능

 

이 객체는 더 이상 코드에서 접근할 수 없습니다.

 

이런 값을 도달 불가능한 값이라고 합니다.

 

가비지 컬렉터는 이런 도달 불가능한 값을 정리할 수 있습니다.

 


 

3. Mark-and-Sweep 알고리즘이란?

 

JavaScript의 가비지 컬렉션을 설명할 때 자주 등장하는 개념이 Mark-and-Sweep 입니다.

말 그대로 해석하면 다음과 같습니다.

  • Mark: 도달 가능한 값을 표시한다
  • Sweep: 표시되지 않은 값을 쓸어버린다

JavaScript 엔진은 루트에서 출발해 참조를 따라가며 도달 가능한 객체들을 표시합니다.


그리고 표시되지 않은 객체들은 더 이상 접근할 수 없는 값으로 보고 정리할 수 있습니다.

 

 

마무리


 

오늘은 JavaScript의 가비지 컬렉션에 대해서 정리해보았습니다.

 

메모리 관리를 위해 시행하는 절차로 핵심은 루트에서 출발했을 때 도달할 수 없는 값들은 제거한다는 것을 의미하는 것 같습니다.

 

일단 오늘 JavaScript의 Mark-and-Sweep 알고리즘과 루트에 대한 직관을 이해할 수 있어 다행네요.. 휴.. 이게 쓸모가 있을지는 모르지만 그래도 모르는 것 보다는 좋겠죠?

 

공부 화이팅!

 

'웹 개발 > Javascript' 카테고리의 다른 글

[JavaScript(13)] 몫은 어떻게 구해요? 숫자형(Number)쉽게 정리하기  (0) 2026.05.31
[JavaScript(12)] 생성자 함수? 객체 리터럴과의 차이  (0) 2026.05.31
[JavaScript(10)] 객체 복사(Object.assign()과 structuredClone())  (0) 2026.05.31
[JavaScript(9)] 객체, 프로퍼티와 메서드  (0) 2026.05.31
[JavaScript(8)] 코드품질을 높이는 방법  (0) 2026.05.30
'웹 개발/Javascript' 카테고리의 다른 글
  • [JavaScript(13)] 몫은 어떻게 구해요? 숫자형(Number)쉽게 정리하기
  • [JavaScript(12)] 생성자 함수? 객체 리터럴과의 차이
  • [JavaScript(10)] 객체 복사(Object.assign()과 structuredClone())
  • [JavaScript(9)] 객체, 프로퍼티와 메서드
Sangenie
Sangenie
경제적 자유를 위한 하루 공부.
  • Sangenie
    새싹
    Sangenie
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • AI (0)
        • 하네스 엔지니어링 (0)
      • 웹 개발 (25)
        • Javascript (16)
        • JAVA (9)
      • 토막지식 (1)
      • TIL (7)
      • 경제 (8)
        • 경제뉴스 (7)
        • 비트코인 분석 (1)
      • Library (1)
        • IT (1)
        • Finance (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    조건문
    java
    개발공부
    코딩공부
    경제공부
    자바스크립트
    비트코인
    가상자산
    JavaScript
    반복문
    객체
    암호화폐
    til
    자바기초
    TodayILearned
    프론트엔드공부
    프론트엔드
    자바
    경제뉴스
    java공부
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
Sangenie
[JavaScript(11)] 가비지 컬렉션, 메모리는 언제 사라질까?
상단으로

티스토리툴바