[모던 JavaScript 튜토리얼] - [4.3] 가비지 컬렉션

IRISH·2024년 1월 24일
0

JS

목록 보기
43/80

학습 내용

  1. Javascript는 엔진 내의 가비지 컬렉터(Garbage Colloector)에서 메모리 관리를 수행한다.

  2. 이때 GC 기준은 도달가능성(Reachability)라는 개념이 사용된다.

  3. 루트(Root) : 태생부터 도달이 가능하여 명백한 이유없이는 삭제되지 않는 값

  • 현재 함수의 지역변수와 매개변수
  • 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
  • 전역 변수
  • 기타 등등
  1. 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이다.

  2. GC가 자동하는 내부 알고리즘은 "mark-and-sweep"이다.

  • 루트(Root)에 접근하여 Mark한다.
  • 루트 참조하는 객체에 접근하여 Mark한다.
  • 더이상 참조하는 객체가 없을 때까지 객체가 참조하는 객체에 접근하여 Mark한다.
  • 더이상 접근할 객체가 없으면, Mark되지 않은 객체를 메모리에서 삭제(Sweep)한다.

※ 중요한 점은, 루트를 출발지로해서 참조가 되어 도달 가능한 객체여야 삭제가 안된다는 점이다. 루트가 접근할 수 없고 지들끼리 참조하는 객체 덩어리를 "도달할 수 없는 섬(Unreachable Island)"이라고 한다.

  1. GC 최적화 기법
  • generational collection(세대별 수집) : 오래된 객체와 새로운 객체를 구분하여, 새로운 객체는 엄격하게 감시하여 제거하고 오래된 객체는 덜 감시함.
  • incremental collection(점진적 수집) : 방문해야할 객체가 많으면 부하가 높아진다. 모든 객체를 한번 다 방문하지말고, 여러부분으로 나누어 점진적으로 GC를 진행한다. 그 차이로 인한 변경사항을 추적하는데 추가작업이 필요하다.
  • idle-time collection(유휴 시간 수집) : CPU 부하를 덜 주기위하여, idle 상태에서만 GC를 실행함.
  1. 참고자료

느낀점

가비지 컬렉션에 대해서 상세히 공부한 것은 처음인 것 같다.

정보처리기사나 전공 이론을 통해 공부를 할 때에는 특정 메모리 전체에서 일부 메모리가 비어 있을 때, 이 비어있는 메모리를 어떻게 합칠 것인가에 대한 공부를 했었다.

이러한 이론적인 측면에서는 말 그대로 Software적 관점에서의 메모리 가비지 컬렉션을 의미하는 바였고, 자바스크립트의 가비지 컬렉션 수행방식은 완전 다른 개념이라는 것을 알게 됐다.

자바스크립트 외에 C언어, 자바, 파이썬들의 가비지 컬렉션 방식들은 어떻게 되는지 궁금하다.

profile
#Software Engineer #IRISH

0개의 댓글