Lee Jaeyoon2
재유니버스
Lee Jaeyoon2
전체 방문자
오늘
어제
  • 분류 전체보기 (228)
    • TIL (165)
    • 생각 (11)
    • 서평 (1)
    • JavaScript & TypeScript (4)
    • React (0)
    • C (45)
    • 에러 핸들링 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 플래그
  • 코드숨
  • 회고
  • dotenv
  • 코드숨 리액트 8기
  • 코드숨 리액트
  • 객체
  • dotenv-webpack
  • 실수
  • C
  • TiL
  • 코딩 도장
  • JavaScript
  • react
  • C언어 코딩 도장
  • 5F
  • 변수
  • 심사 문제
  • map
  • c언어

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Lee Jaeyoon2

재유니버스

TIL

TIL - 20221010

2022. 10. 10. 21:55

 오늘은 자바스크립트의 가비지 컬렉션에 대해 공부했다.

 

가비지 컬렉션 기준

  자바스크립트는 도달 가능성이라는 개념을 사용해 메모리 관리를 수행한다. 도달 가능한이라는 의미는 어떻게든 접근하거나 사용할 수 있는 값을 의미한다. 도달 가능한 값들은 메모리에서 삭제되지 않는다. 다음과 같은 값들은 태생부터 도달할 수 있기 때문에 명백한 이유 없이 삭제되지 않는다.

  • 현재 함수의 지역 변수와 매개 변수
  • 전역 변수
  • 중첩 함수 체인에 있는 함수에서 사용되는 변수와 매개변수

결국, 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이 된다.

자바스크립트 엔진내에서 가비지 컬렉터가 끊임없이 동작한다. 따라서, 모든 객체를 모니터링하고 도달할 수 없는 객체는 삭제된다.

 

가비지 컬렉션 알고리즘

 자바스크립트의 가비지 컬렉션 알고리즘은 Reference-counting과 Mark-and-sweep으로 두 가지가 있고 두 가지 중 현재 많은 브라우저에서 선택하고 있는 알고리즘은 Mark-and-sweep이다. Mark-and-sweep 알고리즘은 앞서 얘기했듯이 도달할 수 없는 객체를 가비지로 판단한다. Mark-and-sweep 알고리즘은 루트 정보를 수집하고 기억하며, 루트가 참조하고 있는 모든 객체를 방문하고 마크한다. 모든 객체를 방문할 때까지 이 과정을 반복한다. 가비지 컬렉터는 자동으로 실행되므로 강제로 멈추거나 실행할 수 없으며 모던 JavaScript 튜토리얼에 따르면 자바스크립트 엔진은 실행에 영향을 미치지 않으면서 가비지 컬렉터 성능을 증가시키기 위한 최적화 기법을 사용한다고 한다.

'TIL' 카테고리의 다른 글

TIL - 20221012  (0) 2022.10.12
TIL - 20221011  (0) 2022.10.11
TIL - 20221009  (0) 2022.10.09
TIL - 20221008 (객체와 Map 성능 차이)  (0) 2022.10.08
TIL - 20221007 (LRU)  (0) 2022.10.07
    'TIL' 카테고리의 다른 글
    • TIL - 20221012
    • TIL - 20221011
    • TIL - 20221009
    • TIL - 20221008 (객체와 Map 성능 차이)
    Lee Jaeyoon2
    Lee Jaeyoon2

    티스토리툴바