🔖JS

Garbage Collector (가비지 컬렉터)

Jerry_K 2025. 2. 11. 17:42

Garbage Collector라는 단어는 정말 자주 나온다. 

 

지역 변수는 Stack에 저장되고 

동적으로 할당되는 것들은 Heap 영역에 들어간다. 

(동적으로 할당되는 구체적인 예시는 배열, 리스트, 트리, 객체 등이 있음)

 

 

보통 스택 같은 경우, 함수가 호출되면 해당 함수의 변수들이 스택 프레임에 저장된다. 

그리고 함수 실행이 끝나면 스택 프레임이 자동으로 해제되면서 스택에서 사라진다.

 

Heap 영역에 있는, 동적 할당 받은 것들은 다르다.

C, C++과 같은 언어에서는 개발자가 free() delete를 호출해서 직접 메모리를 해제해야 한다. 

하지만 JS, Java, Python과 같은 언어에서는 가비지 컬렉터가 자동으로 메모리를 관리해준다.

 

이제 이런 편리한 시스템에 대해 알아보자  ! 


 🔧Garbage Collertor

GC에 대해서는 딱히 넣을 사진이 없다...

 

1. Garbage Collection ?  Garbage Collector ? 

  • Garbage Collector는 가비지 컬렉션을 수행하는 프로그램
  • Garbage Collection은 불필요한 메모리를 자동으로 해제하는 과정
  • 일반적으로 GC라고 하면 Garbage Collection이라고 보면 된다 

 

2. Garbage Collector와 OS 연관 관계

  • 연관관계는 없다고 보면 된다.
  • 프로그램이 실행되면 OS는 프로세스 단위로 메모리 공간 할당
    • OS는 그저 메모리 할당을 담당
  • GC는 내부 개별 객체 단위로 메모리 정리
  • GC는 언어의 런타임 시스템
  • ex) OS는 Java 프로세스에 4GB 메모리 제공,그 안서 객체 관리는 GC가 결정

 

3. Garbage Collector가 동작하는 환경

  • Java의 GC
    • Java Virtual Machine이 시행되는 동안 GC 자동 실행
    • JVM 내부에 Heap 영역이 있고, GC는 여기에서 객체 관리
  • JS의 GC
    • V8 엔진 (Chrome, Node.js)에 내장된 GC를 활용
    • JS 엔진이 객체를 Heap에 저장 
    • GC가 주기적으로 사용되지 않는 객체 탐지 및 제거
  • Python의 GC
    • CPython 인터프리턱 GC를 수행

 

4. Garbage Collection 최적화 

let obj = { name: "GC" };
obj = null;  // 가비지 컬렉션 대상이 됨
  • 위와 같은 경우, null 또는 undefined 할당하여 참조 제거

 

📌 주의

function createClosure() {
  let largeArray = new Array(1000000); // 메모리 많이 사용
  return function () {
    console.log(largeArray.length);
  };
}

 

  • 위에처럼 클러저가 사용되는 경우, Garbage Collection는 외장 함수 변수 처리를 즉시 해제하지 않음
  • 이런 경우 아래와 같이 메모리 누수 방지를 위해 해제 필수 ! 
largeArray = null;

 

'🔖JS' 카테고리의 다른 글

싱글톤 패턴 (Singleton 패턴)  (0) 2024.12.16
Default Export 와 Named Export  (0) 2024.12.12
Java script에서 Promise 란 ? (+@ Async / Await)  (0) 2024.12.12