V8은 어떻게 동작하는가?
- JIT(Just In Time) 컴파일러는 런타임에 모든 자바스크립트를 기계어 코드로 컴파일하고, 중간 코드를 생성하지 않는다.
- 엔진은 두개의 부분으로 구성된다.
1. ignition Interpreter
- 코드를 바이트코드를 해석하는 구문분석을 담당한다.
- 구문분석기가 생성한 AST (Abstract Syntax Tree)를 입력으로 사용하고, 바이트코드를 생성한다.
왜 인터프리터가 더 느린데, 인터프리터를 사용하나?
- 메모리 사용량을 줄이기 위해서.
- 즉, 인터프리터는 전체 프로그램을 컴파일하는 컴파일러와 달리, 필요한 라인만 컴파일하므로.
- ignition 은 코드를 처음 실행할 때에만 동작한다.
- 생성된 바이트코드는 Turbofan 컴파일러에 의해 사용된다.
2. Turbofan Compiler
- 코드 실행중 받는 데이터를 기반으로, 코드를 최적화하고 보다 최적화 된 버전을 다시 컴파일한다.