길잃은곰
길을 잃어 떠도는 곰
길잃은곰
전체 방문자
오늘
어제
  • 분류 전체보기 (87)
    • Algorithm (6)
    • HTML, CSS (9)
    • Frontend (1)
    • SW공학 (1)
    • WEB (4)
    • Javascript (29)
    • Typescript (0)
    • React (8)
    • Computer Science (11)
    • NEWS (0)
    • TIL(WIL) (4)
    • ETC (5)

블로그 메뉴

  • ✨깃허브
  • 홈
  • 태그
  • 방명록

인기 글

태그

  • VW
  • Pixel
  • 자바스크립트
  • REM
  • EM
  • Es5
  • 코드트리
  • javascript2016
  • 코테
  • ES6
  • %
  • element
  • 연탄
  • root-element
  • ES8
  • JavaScript
  • VH
  • js2016
  • PX
  • ES7
hELLO · Designed By 정상우.
길잃은곰

길을 잃어 떠도는 곰

Javascript

[ JavaScript ] 자바스크립트 메모리 관리

2023. 1. 17. 04:54

메모리 관리

자바스크립트는 메모리 관리를 위해 가비지 컬렉션을 사용한다. 가비지 컬렉션은 사용하지 않는 메모리를 자동으로 해제하는 기능이다.

메모리 생명주기

  1. 할당 : 변수에 값을 할당하면 메모리에 공간이 할당된다.
  2. 사용 : 할당된 메모리 공간을 참조하거나 접근한다. (Read, Write)
  3. 해제 : 사용이 끝난 메모리 공간을 해제한다.

=> 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
    'Javascript' 카테고리의 다른 글
    • [ Javascript ] 콜스택과 힙
    • [ Javascript ] 클래스란 무엇인가?
    • [ JavaScript ] map, forEach, reduce
    • [ Javascript ] 자바스크립트에서 데이터 형변환
    길잃은곰
    길잃은곰

    티스토리툴바