Skip to content
On this page

2023년 01월 13일

수정하기
문서 생성 2023-01-13 21:05:27 최근 수정 2023-01-13 23:17:21

📚 오늘 도전하고, 배운 것

오늘의 커밋.

JavaScript GC

  • Javascript.info에 나온 내용을 정리해본다.
    • 자바스크립트에 값들은 메모리 공간을 차지하고 있다. 사용하지 않는 경우에 정리가 필요한데 자바스크립트 엔진이 이를 처리한다. 이를 가비지 컬렉션이라 한다.
    • 가비지 컬렉션에는 기준이 있다. 도달 가능한 값인지 여부다.
    • 도달 가능한 값의 기준은
      • 어떻게든 접근하거나 사용 가능한 값이다. 접근하거나 사용할 수 있기 때문에 메모리에서 삭제하면 안되기 때문이다.
    • 도달 가능한 값의 종류 -> 루트라 부른다.
      • 현재 함수의 지역변수, 매개변수
      • 중첩함수 체인에 있는 함수에서 사용되는 변수/매개변수
      • 전역변수
    • 루트가 참조하는 값 또는 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이기 때문에 가비지 컬렉터가 제거하지 않는다.
    • 내부 알고리즘은 mark-and-sweep이다.
      • 가비지 컬렉터는 루트 정보를 수집해 기억(mark)한다. 루트가 참조하고 있는 모든 객체를 방문해 또 mark. mark된 모든 객체를 방문해서 그 객체들이 참조하는 객체도 mark.
      • 도달 가능한 모든 객체를 방문할 때까지 반복한다.
      • mark하는 과정에서 DFS 알고리즘이 생각났는데 v8엔진에서 객체를 dfs로 순회한다고 한다.
      • 다 mark했다면 mark되지 않은 모든 객체는 삭제된다.
      • 아주 좋은 비유가 있었다. 루트에 페인트를 붓는다는 것! 페인트가 묻지 않는 객체는 삭제된다.
    • 엔진이 GC를 실제 실행에 영향 끼치지 않기 위해 최적화 기법을 사용한다.
      • generational collection: 객체의 대부분은 생성 이후 제 역할을 다하면 쓸모 없어지기 때문에 이들(새로운 객체)을 잘 감지하고, 일정 시간 동안 살아남은 객체(오래된 객체)에 대해선 덜 감시한다.
      • incremental collection: 방문해야 할 객체가 많으면 모든 객체를 한 번에 방문/mark 하면 오래걸리기 때문에 여러 부분으로 분리해 별도로 수행
      • idle-time collection: CPU가 유휴 상태일 때 수행

🤔 학습하면서 궁금하거나 어려웠던 점

  • JavaScript Proxy가 여러 공부 자료에서 나오는데 와닿지가 않았다. 근데 하나 예시를 알게 되었다. observer pattern을 위해 객체 값이 변경된 경우 notify할 수 있다. 기존에는 defineProperty를 사용해야 하는데 간편해졌다.

🌅 내일은 무엇을?

  • Virtual DOM 학습하기
  • 코딩 테스트 문제 풀기 (1문제)

✒️ log

  • 비가 정말 많이 내렸다.
  • 오랜만에 Frontend Developer Load map에 들어가봤다. 사이트가 많이 변했다. 예전에는 그냥 이미지였던 것 같은데
    • 모르는 것이 산더미다. 왜 배워야하는지 파악하고 공부하는 것이 중요할 것 같다

LINKS TO THIS PAGE