devSoyoung / STUDY

✏️ 공부한 내용 정리, 주제에 따라 분류
4 stars 1 forks source link

자바스크립트 엔진 #47

Open devSoyoung opened 3 years ago

devSoyoung commented 3 years ago

https://meetup.toast.com/posts/77 글 요약 정리 (2016년 작성된 글이라 이후에 어느정도 변화는 있었을 것이라 생각..)

JITC (Just-in-time Compilation)

image

  1. 소스코드를 파싱
  2. 중간 언어(IR, intermediate representation)인 bytecode 형태로 변환
  3. JIT 모드 - 생성된 bytecode를 기반으로 native code로 컴파일해서 수행 interpreter 모드 - bytecode를 하나씩 읽으며 동작

왜 JS 엔진은 JITC 방식을 쓰나

JS는 JITC보다 인터프리터가 낫다?

자바스크립트 JITC는 모든 예외적인 케이스를 다 고려해 코드를 생성해야 함 → 예외 케이스를 고려하다 보면 많은 양의 native code가 생성됨\

데이터형의 변화로 인한 예외 케이스가 발생하게 되면 slow case로 건너뜀

Adaptive JIT Compilation

실제로 JavaScript 엔진에서 수행하는 많은 최적화들 (hidden class, inline caching 등)은 이러한 방식으로 최적화를 많이 수행하는데, 변수의 타입이나 object property가 바뀌는 등 동적인 상황이 발생할 수 있지만, 실제로는 동적인 변화가 자주 일어나지 않을 것이라고 가정합니다. 따라서 동적인 변화가 발생했을 때 페널티는 크더라도, 변화하지 않았을 때 큰 성능 이득을 볼 수 있는 최적화들을 적용합니다. 이런 대표적인 최적화로 대부분의 JavaScript JITC에서 사용하고 있는 hidden class나 inline caching을 들 수 있는데, 실제로 이러한 최적화가 엄청난 효과가 있습니다.

마음에 새기자