구글에서 C++로 만든 자바스크립트, 웹 어셈블리 엔진이고 오픈 소스이다. 현재는 구글 크롬과 노드 js에서 사용을 하고 있다고 한다.
인터프리터 언어인 자바스크립트의 속도를 개선하기 컴파일을 최적화 해주는 엔진이다.
컴파일 언어는 코드를 기계어로 변환하여 사용을 하지만 인터프리터 언어는 그때 마다 번역을 하면서 실행을 하는 방식입니다.
과거에는 인터프리터 언어인 자바스크립트 속도를 개선하기 위해서 자바스크립트 코드를 머신 코드로 번역하여 사용하는 컴파일러 형식을 사용하였다.
풀코드젠은 자바스크립트를 머신코드로 변환하여 빠르게 실행할 수 있도록 해주는 일종의 컴파일러이고 크랭크샤프트는 풀코드젠으로 코드가 실행된 뒤, 자바스크립트의 추상구문트리를 최적화하여 static single-assignment, SSA form으로 변환하는 옵티마이저입니다.
V8 엔진은 내부적으로 여러 쓰레드를 사용하는데, 메인 쓰레드에서는 코드를 컴파일하고 실행하고, 프로파일러 쓰레드에서는 어떤 메서드에서 시간이 오래 걸리는지 알려주며, 그 외에도 가비지 컬렉터 등을 위한 여러 쓰레드가 있습니다. 크랭크샤프트는 풀코드젠으로 코드가 실행된 이후 프로파일러 쓰레드가 충분한 데이터를 얻게된 이후, 그 데이터들을 바탕으로 최적화를 실행합니다.
최적의 성능을 실행시켜주기 위한 엔진이다. 개발자가 깊게 이해를 할 필요는 없다고 생각한다.
JIT(Just-In-Time) Compiler = 동적컴파일 + 정적컴파일
실행 시점에 인터프리터 방식으로 바이트 코드를 생성한다.
Ignition(V8 Engine이 바이트 코드로 바꾸는 컴파일러)가 바이트 코드를 생성하고 TurboFan이라는 컴파일러를 통해서 죄적화 컴파일 과정을 거친다고 한다.
바이트코드 컴파일러가 최적화 과정을 대신 처리해준다.