일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- nest
- react-slick
- DB
- 자바스크립트
- 구조 분해 할당
- nodemailer
- Mongoose
- 참조에 의한 객체 복사
- logstash
- nextjs
- MongoDB
- JSON.stringify
- 객체
- 이메일 전송
- AGGREGATE
- 캐러셀
- TypeScript
- Map
- 카카오 소셜로그인
- 중첩 구조 분해
- nestjs
- javacript
- 위크맵
- 위크셋
- 카카오로그인
- JavaScript
- JSON.parse
- context switch
- 화살표 함수
- 로그스태시
- Today
- Total
뚜sh뚜sh
[모던 JavaScript] 4.3 가비지 컬렉션 본문
- 자바스크립트는 눈에 보이지 않는 곳에서 메모리 관리를 수행함
- 원시값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지함
- 자바스크립트 엔진 내에선 가비지 컬렉터가 끊임없이 동작함
- 가비지 컬렉터는 모든 객체를 모니터링하고, 도달할 수 없는 객체는 삭제함
- 외부로 나가는 참조는 도달 가능한 상태에 영향을 주지 않음
- 가비지 컬렉션은 엔진이 자동으로 수행하므로 개발자는 이를 억지로 실행하거나 막을 수 없음
가비지 컬렉션 기준
- 자바스크립트는 도달 가능성이라는 개념을 사용해 메모리 관리를 수행함
- '도달 가능한' 값은 어떻게든 접근하거나 사용할 수 있는 값을 의미함
- 도달 가능한 값은 메모리에서 삭제되지 않음
1. 아래 값들은 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 않음
- 현재 함수의 지역 변수와 매개변수
- 중첩 합수의 체인에 있는 함수에서 사용되는 변수와 매개변수
- 전역 변수
- 기타 등등
2. 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이 됨
도달할 수 없는 섬
- 객체들이 연결된 섬 같은 구조를 만드는데, 최상위를 null값으로 만들어버리면 섬에 도달할 방법이 없으므로, 섬을 구성하는 객체 전부가 메모리에서 삭제됨
내부 알고리즘 (mark-and-sweep)
- 가비지 컬렉터는 루트 정보를 수집하고 이를 기억(mark)함
- 루트가 참조하고 있는 모든 객체를 방문하고 이것들을 'mark'함
- mark된 모든 객체에 방문하고 그 객체들이 참조하는 객체도 mark 함, 한번 방문한 객체는 전부 mark하기 때문에 같은 객체를 다시 방문하는 일은 없음
- 루트에서 도달 가능한 모든 객체를 방문할 때까지 위 과정을 반복함
- mark되지 않은 모든 객체를 메모리에서 삭제함
'Language > JavaScript' 카테고리의 다른 글
[모던 JavaScript] 4.5 new 연산자와 생성자 함수 (0) | 2023.01.30 |
---|---|
[모던 JavaScript] 4.4 메서드와 this (0) | 2023.01.30 |
[모던 JavaScript] 4.2 참조에 의한 객체 복사 (0) | 2023.01.27 |
[모던 JavaScript] 4.1 객체 (0) | 2023.01.27 |
[모던 JavaScript] 3.1 Chrome으로 디버깅하기 (0) | 2023.01.27 |