-
Javascript개발자라면 다들 한번쯤은 들어보셨을겁니다 바로 V8엔진!!
Node.js를 하면서도 구글 크롬 브라우저에 대해서 얘기를 들을때도 항상 빠지지않고 나오는 내용인데 도대체 V8엔진이라는게 무엇이길래 이렇게 나오는걸까요?
(v8 이미지)
이번시간에 한번 알아보도록 하죠!!!
먼저 V8엔진에 대해서 간단히 소개를 해보자면
- Google이 개발한 Open Source
- C++로 구성, 개발되어있다
- Node.js 런타임, Chrome Browser에서 사용됩니다
위와 같은데 V8엔진의 가장 큰 목적은 속도개선입니다V8엔진이 어떤 방식으로 구동 되는지 알게된다면 속도개선의 이유를 알게될것이라고 생각하는데 살펴보면
V8엔진은 인터프리터를 사용하지않고 머신 코드로 변환합니다
이 머신 코드가 작동하는 방식은 다음과 같은데
- 자바 스크립트코드를 풀 코드젠에서 읽어 자바 스크립트 코드를 직접 머신 코드로 변환합니다 (직접 변환하기에 속도는 매우 빠릅니다)
- 이와 같이 직접 머신코드로 변환하기에 따로 바이트코드를 저장하지않아 인터프리터가 V8엔진에서는 필요가 없게 됩니다
- 위와 같이 만들어진 데이터를 통해서 어느 메소드 즉 어느 코드에서 최적화가 가능한지 알아내어 크랭크 샤프트가 V8의 다른 쓰레드에서 최적화를 시작합니다
- 인라인 캐싱을 통해 최적화
- 히든클래스
- 최적화를 마친뒤 크랭크 샤프트는 이를 리튬이라는 좀 더 하위단계로 내려갑니다 (이 부분에서 메모리에 저장)
- 리튬 코드를 머신 코드로 컴파일 뒤에 OSR이 일어납니다
이렇게만 말하면 잘 모르겠죠...?
각 용어에 대한 설명은 밑에 적어두겠습니다!
- 풀 코드젠
- 간단하고 빠른 컴파일러로 자바 스크립트 코드를 읽어 느린 머신코드를 생성
- 크랭크 샤프트
- 풀 코드젠보다 최적화를 더 하기 위한 최적화 컴파일러로 고도로 최적화된 머신코드를 생성
- OSR
- On-Stack-Replacement로 최적화가 덜된 실행된 코드를 최적화가 된 코드로 변경하기위해 레지스터, 스택 등을 이용하여 변경하는것
인라이닝과 인라인 캐싱, 히든클래스에 내용은 다음에 포스팅한뒤 이렇게 V8에 대한 정보를 알아가며 JS는 어떤식으로 코딩해야 효율적인지 알아보도록 하겠습니다'프로그래밍' 카테고리의 다른 글
자바스크립트 메모리 누수와 어떻게 막아야 하는가? (1) 2018.11.19 자바스크립트의 메모리 관리법 (0) 2018.11.15 V8엔진을 통한 효율적인 JS개발 (0) 2018.11.14 자료형의 범위에 대하여 (0) 2018.06.17 함수형 프로그래밍? (0) 2018.04.23