logo

Javascript v8 엔진에 대해 알아보자

Javascript · 10월 2일 · 8 min read
poster

V8은 Chromium Project에서 Chromium 및 Google Chrome 웹 브라우저를 위해 개발한 무료 오픈 소스 JavaScript 및 WebAssembly 엔진이다. 이 프로젝트의 개발자는 Lars Bak이며, V8 엔진의 첫 번째 버전은 2008년 9월 2일 크롬의 첫 번째 버전과 동시에 출시되었다. 또한 Couchbase, Deno, Node.js 등 서버 측에서도 사용되고 있다.

역사

V8 어셈블러는 Strongtalk 어셈블러를 기반으로 2010년 12월 7일 Crankshaft라는 새로운 컴파일 기반이 출시되어 속도가 향상되었고, 2015년 크롬 버전 41에서는 프로젝트 TurboFan이 추가되었고 V8 개발의 대부분은 Sun Microsystems가 개발한 Java HotSpot 가상 머신에서 많은 영감을 얻었으며, 새로운 실행 파이프라인은 HotSpot의 파이프라인과 매우 유사하다. 있다.

2016년에 V8에 추가된 Ignition 인터프리터는 TurboFan과 Crankshaft에 비해 메모리가 적은 안드로이드 폰의 메모리 사용량을 줄이기 위한 설계 목표로 V8에 추가됐다. 핫스팟에서 사용되는 템플릿 인터프리터와 유사한(완전히 동일하지는 않지만) 디자인을 공유한다.

2017년 V8은 Ignition(인터프리터)과 TurboFan(최적화 컴파일러)으로 구성된 완전히 새로운 컴파일러 파이프라인을 출시했으며, V8 버전 5.9부터 자바스크립트 실행을 위한 Full-codegen(초기 기준선 컴파일러) 와 Crankshaft는 더 이상 자바스크립트의 새로운 언어 기능과 그 기능에 필요한 최적화를 따라잡을 수 없다고 판단해 V8에서 더 이상 사용되지 않는다.

2021년에는 V8의 기존 TurboFan 컴파일러를 보완하는 SparkPlug 컴파일러가 출시되어 HotSpot에서 사용되는 프로파일링 C1 컴파일러와 함께 새로운 계층형 컴파일 파이프라인이 도입되었다.

디자인

V8은 먼저 자체 파서로 추상 구문 트리를 생성한다. 그런 다음 Ignition은 V8 내부의 바이트코드 형식을 사용하여 이 구문 트리에서 바이트코드를 생성하고, TurboFan은 이 바이트코드를 기계어로 컴파일한다. 즉, V8은 ECMAScript를 실행하기 전에 Just In Time 컴파일을 사용하여 네이티브 기계어 코드로 직접 컴파일한다. 컴파일된 코드는 코드 실행 프로파일의 휴리스틱에 따라 실행 중에 동적으로 최적화(및 재최적화)된다. 사용되는 최적화 기술에는 인라인화, 비싼 런타임 속성 생략, 인라인 캐시 등이 있다. 가비지 컬렉터는 세대 증분 컬렉터이다.

관련 포스트
post image
javascript 보안 코딩
JavaScript와 DOM은 악의적인 제작자가 웹을 통해 클라이언트 컴퓨터에서 실행되는 스크립트를 배포할 수 있는 가능성을 제공한다. 브라우저 제작자는 두 가지 제한을 통해 이러한 위험을 최소화한다. 첫째, 스크립트는 샌드박스 내에서 실행되며, 파일 생성과 같은 범
Javascript·2월 24일·26 min read
post image
javascript, 어디든 쓰여요
2023년 현재 98.7%의 웹 사이트가 웹 페이지 동작을 위해 클라이언트 측에서 자바스크립트를 사용하고 있으며, 많은 경우 타사 라이브러리가 내장되어 있는 경우가 많다. 내장되어 있다. 모든 주요 웹 브라우저는 사용자의 기기에서 코드를 실행하기 위한 전용 자바스크립
Javascript·2022년 12월 26일·24 min read