자바스크립트의 가비지 컬렉션이란

2024-01-04

  • JavaScript
  • FE
  • General

자바스크립트의 가비지 콜렉션(Garbage Collection, GC)은 자동으로 메모리 관리를 수행하는 프로세스입니다. 가비지 콜렉터는 프로그램이 더 이상 사용하지 않는 메모리를 자동으로 찾아내어 해제하며, 이를 통해 메모리 누수를 방지하고 애플리케이션의 효율성을 유지합니다.

가비지 콜렉션의 원리

자바스크립트 엔진은 가비지 콜렉션을 통해 메모리 할당과 해제를 관리합니다. 이 과정에서 주요한 개념은 '도달 가능성(reachability)'입니다. 도달 가능한 값은 어떤 방식으로든 접근할 수 있는 값이며, 이는 가비지 콜렉션의 대상이 되지 않습니다.

  1. 루트(Roots): 자바스크립트에서 루트는 전역 변수와 현재 실행 중인 함수의 로컬 변수와 매개변수를 말합니다. 이러한 값들은 항상 도달 가능한 상태로 간주됩니다.

  2. 참조(References): 루트에서 시작하여 참조를 통해 도달할 수 있는 모든 값들도 도달 가능한 상태로 간주됩니다. 객체가 다른 객체를 참조하고, 그 객체가 또 다른 객체를 참조하는 체인은 모두 도달 가능한 객체로 간주됩니다.

가비지 콜렉션의 방법

자바스크립트 엔진은 다양한 가비지 콜렉션 알고리즘을 사용할 수 있습니다. 가장 일반적인 방법은 '표시-제거(Mark-and-Sweep)' 알고리즘입니다.

  1. 표시(Mark): 가비지 콜렉터는 루트에서 시작하여 도달 가능한 모든 객체를 "표시"합니다.

  2. 제거(Sweep): 표시되지 않은 객체들은 도달할 수 없는 것으로 간주되며, 메모리에서 해제됩니다.

가비지 콜렉션의 장단점

장점:

  • 자동 메모리 관리: 개발자가 메모리 할당과 해제를 직접 관리할 필요가 없어 개발이 간편해집니다.
  • 메모리 누수 방지: 자동으로 더 이상 사용되지 않는 메모리를 해제함으로써 메모리 누수를 최소화합니다.

단점:

  • 성능 저하의 가능성: 가비지 콜렉션이 발생할 때 프로그램의 실행이 잠시 중단될 수 있으며, 이로 인해 성능 저하가 발생할 수 있습니다.
  • 메모리 관리의 불투명성: 자동 메모리 관리는 때로 예측하기 어려운 메모리 사용 패턴을 초래할 수 있습니다.

가비지 콜렉션은 자바스크립트와 같은 고급 언어에서 메모리 관리를 단순화하지만, 최적의 성능을 위해서는 여전히 코드 최적화와 메모리 사용 패턴에 주의를 기울여야 합니다.

JVM이란...

이번 년도의 개인적...