메모리 관리
자바스크립트는 메모리 관리를 위해 가비지 컬렉션을 사용한다. 가비지 컬렉션은 사용하지 않는 메모리를 자동으로 해제하는 기능이다.
메모리 생명주기
- 할당 : 변수에 값을 할당하면 메모리에 공간이 할당된다.
- 사용 : 할당된 메모리 공간을 참조하거나 접근한다. (Read, Write)
- 해제 : 사용이 끝난 메모리 공간을 해제한다.
=> 2번째 부분은 모든 언어에서 명시적으로 사용된다. 하지만 1번째와 3번째는 low-level 언어에서는 명시적으로 사용되지만, high-level 언어에서는 암묵적으로 사용된다.
자바스크립트의 메모리 관리
값 초기화
- 자바스크립트는 값을 선언할 때, 자동으로 메모리를 할당한다.
// 정수, 문자열을 담기 위한 메모리 할당
var n = 123;
var s = "azerty";
// 객체를 담기 위한 메모리 할당
var o = {
a: 1,
b: 2,
};
// 배열을 담기 위한 메모리 할당
var a = [1, 2, 3];
// 함수를 담기 위한 메모리 할당
var f = function () {
return true;
};
함수 호출
- 함수를 호출하면, 함수의 매개변수와 지역변수를 담기 위한 메모리가 할당된다.
// Date 객체를 위해 메모리 할당
let a = new Date();
// Dom 객체를 위해 메모리 할당
let b = document.getElementById("id");
값 사용
- 할당된 메모리 공간을 참조하거나 접근한다. (Read, Write)
할당된 메모리 공간 해제
- 더 이상 사용하지 않는 메모리 공간을 해제한다.
- 할당된 메모리가 더 이상 필요없을 때 를 알아내기 어렵다. 이를 위해 가비지 컬렉션을 사용한다.
가비지 콜렉터의 목표는 메모리 할당을 추적하고, 할당된 메모리가 더 이상 필요없을 때 해제하는 것이다.
가비지 컬렉션 (Garbage Collection)
- 가비지 컬렉션은 메모리 관리의 자동화된 방법이다. 위에서 설명한 것처럼, "더 이상 필요없는 모든 메모리" 를 찾는것은 어렵다.
참조
- 가비지 콜렉션 알고리즘은 참조를 통해 메모리를 관리한다. A 라는 메모리를 통해 B 라는 메모리를 참조하고 있다면, A 는 B 를 참조하고 있다고 말한다. ( B 는 A 에 의해 참조된다. )
가비지 컬렉션 알고리즘
- Reference Counting : 참조 카운팅
- 참조 카운팅은 각각의 메모리 공간에 참조 횟수를 저장한다. 참조 횟수가 0 이 되면, 메모리를 해제한다.
- Mark and Sweep : 마크 앤 스윕
- 마크 앤 스윕은 루트(root) 객체를 시작으로 참조를 따라가며, 참조되는 모든 객체를 마크한다. 마크되지 않은 객체는 가비지로 간주하고, 해제한다.
'Javascript' 카테고리의 다른 글
[ Javascript ] 콜스택과 힙 (0) | 2023.01.17 |
---|---|
[ Javascript ] 클래스란 무엇인가? (0) | 2023.01.17 |
[ JavaScript ] map, forEach, reduce (0) | 2023.01.17 |
[ Javascript ] 자바스크립트에서 데이터 형변환 (0) | 2023.01.17 |
[ Javascript ] 불변성을 유지하는 방법 (0) | 2023.01.17 |