[모던 JS 튜토리얼] 4.3. 가비지 컬렉션

승연·2023년 11월 21일
0
post-thumbnail

쓰레기 모음인 것인가

4.3.1. 가비지 컬렉션 기준

(어떻게든) 도달 가능한 값 → 삭제 x

도달 가능한 값

  • 태생부터 도달 가능한 값 : root

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

4.3.2. example

<script>

      let user = {
         name : 'tiff',
      };
      user = null;

   </script>

→ ‘tiff’ 에 저장된 데이터 삭제, tiff를 메모리에서 삭제

4.3.3. 참조 2개

<script>

      let user = {
         name : 'tiff',
      };

      let admin = user; //user에서 admin으로 복사

      user= null;

   </script>

→ 전역 변수 admin을 통해 여전히 객체 John에 접근할 수 있기 때문에 John은 메모리에서 삭제 X

4.3.4. 연결된 객체

<script>

      let user = {
         name : 'tiff',
      };

      let admin = user; //user에서 admin으로 복사

      user= null;

   </script>
delete family.father;
delete family.mother.husband;

4.3.5. 도달할 수 없는 섬

family = null;

4.3.6. 내부 알고리즘

가비지 컬렉션이 거치는 단계

  • 가비지 컬렉터는 루트(root) 정보를 수집하고 이를 ‘mark(기억)’
  • 루트가 참조하고 있는 모든 객체를 방문하고 이것들을 ‘mark’
  • mark 된 모든 객체에 방문하고 그 객체들이 참조하는 객체도 mark 합니다. 한번 방문한 객체는 전부 mark 하기 때문에 같은 객체를 다시 방문하는 일 X
  • 루트에서 도달 가능한 모든 객체를 방문할 때까지 위 과정을 반복
  • mark 되지 않은 모든 객체 (방문하지 못한 객체) 를 메모리에서 삭제

다양한 최적화 기법 → 실행에는 영향을 미치지 않지만 속도는 더 빠르게 함

profile
앙녕항셍용

0개의 댓글