JS V8 Engine

진성·2022년 5월 28일
0

자바스크립트

목록 보기
21/23

V8

V8은 웹 브라우저를 만드는데 기반을 제공하는 구글에서 개발한 오픈소스 자바스크립트 엔진이다.

V8은 자바스크립트 코드를 실행 전에 최적화된 머신 코드로 컴파일하는 엔진이다.
즉, V8은 자바스크립트 코드를 받아 컴파일하고 실행하는 C++ 프로그램이다.
크롬 브라우저와 노드 js에서 사용된다.

V8이 나오게 된 이유

웹 브라우저 내부에서 자바스크립트의 속도 개선을 위해서 고안되었는데, 자바스크립트 엔진은 웹 특성상 유저와 상호작용을 위해 즉시성이 있는 인터프리터 방식을 사용한다.
인터프리터 방식을 사용하면 코드가 많아질 수록 속도가 느려져 구글맵 같은 기능을 구현하기 어웠다.
따라서 V8은 속도 향상을 위해 자바스크립트 코드를 더 효율적인 머신코드로 번역한다.

V8 Compiler

V8은 JIT Compiler을 지원한다.
일반적인 Compiler에는 동적 컴파일(인터프리터)과 정적 컴파일(Compiler)이 있다.

JIT Compiler는 이 두개를 합친 것으로 실행시점에서 인터프리터 방식으로 바이트 코드를 생성한다.
그 후 V8 엔진은 바이트 코드를 머신코드로 만들고, 그 코드를 캐싱하여 같은 함수가 여러 번 불릴 때 매번 머신 코드를 생성하는 것을 방지한다.

인터프리터 방식은 한줄읽고 실행하는 방식으로 동일한 동작을 하는 함수가 여러번 나오더라고 이를 컴파일 하는 과정을 거치게 된다.
따라서 매우 비효율적이며 JIT Compiler는 이를 방지하여 위와 같은 동작으로 실행하게 된다.

V8 엔진에서 바이트코드를 바꾸는 컴파일러를 Ignition 이라고 말한다.
Ignition는 바이트코드를 생성하고 TurboFan 이라는 컴파일러를 통해 최적화 컴파일하는 과정을 거친다.
이렇게 빠르고 효율적인 컴파일러이기 때문에 JIT(Just-In-Time)라고 불리게 된다.

이를 통해 얻을 수 있는 이점이 있는데 복잡한 과정은 바이트코드 컴파일러가 대신 해주므로 고려하지 않아도 된다는 장점이 있다.
바이트코드는 빠른 기께어 변환을 목적으로 설계되었기 때문에 일반적인 컴파일러보다 제작 과정이 수월하다.

V8 기능 정의

  • 자바스크립트 코드 컴파일 및 실행
  • 콜스택을 핸들링해서 자바스크립트 함수를 특정 순서에 따라 실행
  • 힙메로리 객체에 대한 메모리 할당 관리
  • 더 이상 사용하지 않는 객체를 관리 (가비지컬렉터)
  • 모든 데이터 타입, 연산자, 객체, 함수를 제공
  • 이벤트 루프를 제공

출처 : hjtree.log

profile
풀스택 진행중...

0개의 댓글