1. 탐구
1. Javascript 엔진
: Javascript 코드를 실행하는 프로그램 또는 인터프리터
Javascript는 브라우저 뿐 아니라 Node.js, Electron, React Native 등 프로젝트와 그 밖의 다양한 곳에서 동작한다.
2. Javascript 엔진 종류
- SpiderMonkey
- 최초의 자바스크립트 엔진
- 현재는 Mozilla 재단에서 관리
- FireFox에서 사용
- Chakra
- 마이크로소프트가 개발
- Chakra 엔진의 중요 부분은 Chakra Core라는 오픈 소스로 구성되어 있다.
- Edge 브라우저에 사용
- JavaScript Core
- 애플에서 개발한 JavaScriptCore는 처음에 WebKit 프레임워크를 위해 개발
- Safari와 React Native App에서 사용
- V8
- 구글이 개발
- 자바스크립트 엔진의 대표적인 예는 Google V8 엔진이다. C++로 작성되었으며
- Chrome과 Node.js에서 사용
- ECMASCript와 Web Assembly 표준에 맞게 구현
- 속도 향상을 위해 인터프리터를 사용하는 대신 JIT컴파일러도 사용
- 내부적으로 여러 개의 스레드를 사용한다.
- 메인 스레드는 코드를 가져와 컴파일하고 실행
- 컴파일을 위한 별도의 스레드가 있어서 이 스레드가 코드를 최적화하는 동안 메인 스레드는 쉬지 않고 코드를 수행
3. Javascript 엔진의 구성요소
1. Memory Heap
: 메모리 할당이 일어나는 곳
- 객체 타입 데이터가 저장
- 원시 타입 데이터는 콜스택(Lexical 환경)에 저장
- 객체타입 데이터가 저장된 메모리힙의 주소값은 callstack의 변수 식별자의 값으로 각각 저장
- Callstack에 할당되는 변수 식별자 자체는 callstack 상의 실행 컨텍스트의 Lexical환경이라는 곳에 저장
2. Call Stack
: 코드 실행에 따라 호출 스택(실행 컨텍스트)이 쌓이는 곳