adoptive JITC
공부내용 공유하기

adoptive JITC

v8 엔진에서 사용중인 컴파일 방식.

JIT + interpreter 의 장점을 합친 방식이다.

 

현재 v8엔진에서는 소스코드 파싱 -> AST생성 -> Ignition 컴파일러로 byte code(중간언어) 컴파일 이후 실행한다.

실행 중 런타임 프로파일러를 통해 사용 빈도(반복횟수 등)를 측정한다.

이에 따라 최적화가 필요한 코드(자주 반복 사용되는)를 TurboFan으로 보낸다.

TurboFan에서는 컴파일을 통해 최적화 작업을 진행한다.

(실제 엔진에서 터보팬이 추력을 더해주면서 동시에 배출공기를 통해 냉각 효과를 가져온다는 점을 생각하면 네이밍이 기가막히다)

 

Sneak peek into Javascript V8 Engine

Ever since I started my programming journey, I’ve been writing code in Javascript and things work awesomely. But never even realized the…

medium.com

 

상황에 따라 런타임에서 타입이 바뀌거나 하는 경우에는 deoptimize를 통해 터보팬에 들어간 코드가 다시 나오기도 하고, 또 다른 코드들이 터보팬에 들어가기도 한다.

 

 

자바스크립트 엔진의 최적화 기법 (1) - JITC, Adaptive Compilation : NHN Cloud Meetup

자바스크립트 엔진의 최적화 기법 (1) - JITC, Adaptive Compilation

meetup.toast.com

•Hotspot이 별로 없는 고전적인 JavaScript 프로그램들에는 interpreter가 JITC보다 효율이 좋다.
•최근 많이 사용되는 compute-intensive한 JavaScript 프로그램들에는 JITC가 좋다.
•두 가지 성향의 코드에 대한 성능을 모두 만족하기 위해 최근 엔진들은 adaptive JITC를 채용한다.
•Adaptive JITC는 type profiling을 수행하므로, 변수의 type이 변하지 않는다면 높은 성능을 얻을 수 있다.

 

 

히든클래스 -> 인라인 캐싱의 효과를 보려면 반복문에서의 타입 일관성이 중요한데, 그런 면에서 개발자로 하여금 정적 타이핑을 습관화 해주는 typescript의 이점이 또 보이는 것 같다.