Udemy - JavaScript: The Advanced Concepts
Section 2. Javascript Foundation
Call Stack
- 코드 실행/명령을 위해 우리가 코드의 어디쯤 위치하는지 파악하는 용도
- first-in-last-out
- Stack Overflow : 최대 call stack 사이즈를 초과해서 쌓게되는 경우 error
Memory Heap
- 저장용도
- GC (Garbage Collection) :
- 엔진이 사용하지 않는 데이터를 정리함
- Mark and Sweep (root에 닿을수 없는 object를 해제)
- non-determinism으로 인한 문제
1) 때에 따라 실제 필요한것보다 더 많은 메모리를 쓰고있을수있다
2) GC가 돌 때, 갑자기 시스템이 느려질 수 있다
- Memory Leak 주요 케이스 :
1) 전역변수
2) Event Listener
3) setInterval
JS runtime
- JS 엔진 : Single Thread (Synchronous)
- Web Api :
. Dom, fetch, setTimeout... (Aynchronous)
. window 객체에 들어가있는 함수들 (브라우저에서 제공, JS 종속된게 아님)
- Event Loop + (Job Q ) + Callback Q
1) web Api 동작 후 callback Q 저장
2) call stack이 비면 Event loop 가 돌고 Q에 저장된 작업 호출
3) 원래 callback Q만 있었는데, promise 용으로 우선순위가 높은 Job Q가 추가됨
Node.js
. JS를 브라우저밖에서 사용할수 있게 해주는 JS runtime (2009년~, C++)
. JS가 서버역할도 할 수 있게됨
. 멀티쓰레드 기반 서버는 쓰레드를 다 쓰면 기다려야하지만, Node.js에서는 쓰레드는 하나인 대신 기다림없이 비동기적으로 작업을 처리할 수 있음
궁금
- JS 에서 사용되는 또다른 GC기법이 있나? : 예전엔 순환참조 사용. 2012년 이후 브라우저들은 Mark and Sweep을 사용
- GC는 언제언제 수행되는거지? : 알 수 없음. 보통은 메모리 할당 중에 GC를 넘겨줌. React라면 component가 unmount 될 때도 실행됨.
읽어본 글