Javascript V8

wony·2022년 4월 25일
0

V8은 웹 브라우저를 만드는 데 기반을 제공하는 오픈 소스 자바스크립트 엔진이다.
구글 크롬 브라우저와 안드로이드 브라우저에 탑재되어 있다.

V8 엔진은 C++ 로 작성 되었으며, ECMA-262 에 기재된 ECMAScript 및 WebAssembly 를 처리할 수 있다.

V8의 특징

  1. JavaScript 소스 코드를 컴파일 하고, 실행한다.
  2. 생성하는 Object 를 메모리에 할당한다.
  3. 가비지 콜렉션을 이용해 더 이상 사용되지 않는 Object 의 메모리를 해제한다.
  4. Hidden Class 를 이용해 빠르게 프로퍼티에 접근한다.
  5. TurboFan 을 이용해 최적화된 코드로 만들어 속도 및 메모리를 최적화한다.

현재 V8의 엔진 구조

V8 엔진의 동작 과정


Ignition 바이트 코드(ByteCode)로 변환

Ignition

Ignition은 자바스크립트 코드를 바이트 코드(ByteCode)로 변환하는 인터프리터이다. 원본 소스 코드보다 컴퓨터가 해석하기 쉬운 바이트 코드로 변환하여, 수시로 코드를 파싱(Parsing)하는 작업을 최소화하고 코드의 양도 줄임으로써 메모리 공간도 효율적으로 관리할 수 있게 된다.

자바스크립트는 정적 타이핑 언어가 아니 동적 타이핑 언어라서 소스코드가 실행되기 전에는 알 수 없는 값들이 너무 많아 최적화가 힘들다는 단점이 있다. 때문에 모든 소스를 한 번에 해석하는 컴파일 방식이 아닌 코드 한 줄 한줄 실행될 때마다 해석하는 인터프리트 방식을 채택하면서 다음 세 가지 이점을 가져가고자 하였다.

  1. 메모리 사용량 감소 : 자바스크립트 코드에서 기계어로 컴파일하는 것보다 바이트 코드로 컴파일하는 것이 더 편하다.
  2. 파싱 시 오버헤드 감소 : 바이트 코드는 간결하기 때문에 다시 파싱 하기 편하다.
  3. 컴파일 파이프라인의 복잡성 감소 : TurboFan을 통한 Optimizing 혹은 Deoptimizing 처리 시에도 바이트 코드가 편하다.

TurboFan으로 자주 사용하는 바이트코드를 컴파일

TurboFan

TurboFan은 V8 v5.9 버전 이전에 사용되었던 Crankshaft 컴파일러를 완전히 대체한 최적화 담당 컴파일러이다. TurboFan은 바이트 코드로 수시로 변환하는 과정을 최소화하기 위해 사용된다.

V8은 런타임 중에 Profiler라는 친구에게 함수나 변수들의 호출 빈도와 같은 데이터를 모으라고 시킨다. 이렇게 모인 데이터를 이용하여 TurboFan이 자기 기준에 맞는 코드를 가져와서 최적화를 시킨다.


출처-https://helloinyong.tistory.com/290

profile
무럭무럭 성장중🌿

0개의 댓글