JavaScript - 메모리 관리

김서영·2024년 2월 14일
0

메모리 관리


메모리 생존 주기

  1. 필요할 때 할당합니다.
  2. 할당된 메모리를 사용합니다. (읽기, 쓰기)
  3. 더 이상 필요하지 않으면 해제합니다.

JavaScript의 메모리 할당

값 초기화

프로그래머가 메모리 할당을 신경을 쓸 필요가 없도록, JavaScript는 값을 선언할 때 자동으로 메모리를 할당

const n = 123; // 정수를 담기 위한 메모리 할당
const s = "azerty"; // 문자열을 담기 위한 메모리 할당

const o = {
  a: 1,
  b: null,
}; // 오브젝트와 그 오브젝트에 포함된 값들을 담기 위한 메모리 할당

// (오브젝트처럼) 배열과 배열에 담긴 값들을 위한 메모리 할당
const a = [1, null, "abra"];

function f(a) {
  return a + 2;
} // 함수를 위한 할당(함수는 호출 가능한 오브젝트)

함수 호출을 통한 할당

  • 함수 호출의 결과 메모리 할당
const d = new Date(); // Date 개체를 위해 메모리를 할당

const e = document.createElement("div"); // DOM 엘리먼트를 위해 메모리를 할당
  • 메소드가 새로운 값이나 오브젝트를 할당
const s = "azerty";
const s2 = s.substr(0, 3); // s2는 새로운 문자열
// JavaScript에서 문자열은 immutable 값이기 때문에,
// 메모리를 새로 할당하지 않고 단순히 [0, 3] 이라는 범위만 저장합니다.

const a = ["ouais ouais", "nan nan"];
const a2 = ["generation", "nan nan"];
const a3 = a.concat(a2);
// a 와 a2 를 이어붙여, 4개의 원소를 가진 새로운 배열

값 사용

할당된 메모리를 읽고 쓰는 것

  • 변수나 객체 속성의 값을 읽고 쓰거나 함수 호출 시 함수에 인수를 전달하여 수행할 수 있음

할당된 메모리가 더 이상 필요없을 때 해제하기

JavaScript와 같은 고수준 언어들은 "가비지 콜렉션(GC)"이라는 자동 메모리 관리 방법을 사용한다!!

가비지 콜렉션

더 이상 사용되지 않는 메모리를 자동으로 해제하는 프로세스

  • 더 이상 참조되지 않는 객체는 가비지 컬렉터에 의해 자동으로 탐지되고 메모리에서 제거
  • 이를 통해 메모리 누수를 방지하고 더 이상 필요하지 않은 자원을 해제함으로써 성능을 향상

Mark and sweep 알고리즘(대표적인 가비지 콜렉션 알고리즘)

  • 더 이상 필요 없는 오브젝트를 닿을 수 없는 오브젝트로 정의
  • roots라는 오브젝트의 집합을 가지고 있으며, 주기적으로 가비지 컬렉터는 roots부터 시작하여, roots가 참조하는 오브젝트들, roots가 참조하는 오브젝트가 참조하는 오브젝트들 등을 찾음
  • 이를 통해 모든 닿을 수 있는 오브젝트를 찾고 닿을 수 없는 모든 오브젝트들의 메모리를 해제
  • 가비지 컬렉션은 수동으로 조작할 수 없음
profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글

관련 채용 정보