V8은 웹 브라우저를 만드는 데 기반을 제공하는 오픈 소스 자바스크립트 엔진으로
구글 크롬 브라우저와 안드로이드 브라우저를 탑재하고 있다.
여기서 크롬 브라우저는 크게 Blink라는 렌더링 엔진과 V8이라는 자바스크립트 엔진을 가지고 있다.
V8 엔진은 C++로 작성 되었으며, ECMA-262에 기재된 ECMAScript 및 WebAssembly를 처리할 수 있다.
V8 은 크롬브라우저가 아니더라도 독립적으로 실행이 가능한데, 대표적인 예가 V8 으로 빌드 된 Node.js 가 있다.
자바스크립트 소스코드를 컴파일 하고, 실행한다.
생성하는 객체를 메모리에 할당한다.
가비지 콜렉션을 이용해 더 이상 사용되지 않는 객체의 메모리를 해제한다.
Hidden Class를 이용해 빠르게 프로퍼티에 접근한다.
TurboFan을 이용해 최적화된 코드로 만들어 속도 및 메모리를 최적화한다.
브라우저에서 자바스크립트를 처리하기 위해서 자바스크립트 엔진으로 소스를 내부에서 이해할 수 있는 언어로 변환한 후 실행하는데 이를 컴파일 이라한다.
브라우저에서 자바스크립트의 컴파일은 보통 인터프리터(interpreter)로 처리된다고 알려져있지만 V8엔진의 경우는 좀 다르다.
인터프리터의(interpreter) 경우 자바스크립트를 매번 브라우저가 이해할 수 있는 언어로 변환하는 컴파일작업을 할 때 항상 같은 코드를 반복해서 컴파일하고 실행 한다.
웹의 특성상 새로고침이나 페이지 이동이 잦은데 항상 같은 코드를 반복에서 컴파일 하는 경우가 많다.
V8에서는 자바스크립트 코드를 인터프리터 방식으로 컴파일하고, 이를 ByteCode로 만들어 낸다.
그리고 컴파일 속도를 높이기 위해, 이 ByteCode를 캐싱 해두고, 자주 쓰이는 코드를
인라인 캐싱(inline caching)과 같은 최적화 기법으로 최적화 한 후에,
이후에 컴파일 할 시에 참조하여 속도를 높힌다.
이러한 방식을 JIT(Just-In-Time) Compiler라고 한다.