ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • V8
    Note 2020. 12. 13. 11:38

     

    • 구글에서 만든 JavaScript 엔진(오픈 소스, C++ 구성)
    • 웹 브라우저 안에서 실행되는 JavaScript의 성능을 높이기 위해 처음 고안
    • 구글 크롬과 Node.js의 런타임에서 사용
    • 속도를 높이기 위해서 V8은 인터프리터를 사용하는 대신 머신(기계어) 코드로 변환

     

    위와 같은 특징 중 인터프리터를 사용하지 않고 컴파일하여 머신 코드로 변환하는 특징 때문에 속도가 개선되었다.

     

    인터프리터(interpreter, 해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다.

    원시 코드를 기계어로 번역하는 컴파일러와 대비된다.

     

    동작 방식

    자바스크립트 코드를 처음으로 수행할 때 V8은 풀코드젠을 이용해서 파싱 된 자바스크립트 코드를 변형 없이 직접 머신 코드로 변환한다. 이를 통해 머신 코드의 실행을 매우 빠르게 시작할 수 있는 것이다.

     

    풀코드젠: 간단하고 매우 빠른 컴파일러로서 단순하고 상대적으로 느린 머신 코드를 생산
    크랭크샤프트: 좀 더 복잡한 최적화 컴파일러로서 고도로 최적화된 코드를 생산

     

    이와 같이 직접 머신 코드로 변환하기에 따로 바이트코드를 저장하지 않아 인터프리터가 V8엔진에서는 필요가 없게 된다.

     

    코드가 얼마간 수행된 다음 프로파일러 쓰레드는 충분한 데이터를 얻게 되고 어떤 메소드를 최적화가 가능한지 알아내어 크랭크 샤프트가 V8의 다른 쓰레드에서 최적화를 시작한다.

    • 인라인 캐싱
    • 히든클래스

     

    크랭크 샤프트는 자바스크립트의 추상구문트리를 고수준 정적단일할당(static single-assignment, SSA)으로 번역하는데 이를 하이드로젠(Hydrogen)이라고 부른다. 크랭크샤프트는 또한 하이드로젠 그래프를 최적화합니다. 대부분의 최적화가 이 수준에서 이루어진다.

     

    최적화를 마친뒤 크랭크 샤프트는 이를 리튬이라는 좀 더 하위단계로 내려가고(이 부분에서 메모리에 저장), 리튬 코드를 머신 코드로 컴파일 뒤에 OSR이 일어난다.

     

    On-Stack-Replacement로 최적화가 덜된 실행된 코드를 최적화가 된 코드로 변경하기위해 레지스터, 스택 등을 이용하여 변경하는것

    'Note' 카테고리의 다른 글

    Axios  (0) 2020.12.17
    AWS(Amazon Web Services)  (0) 2020.12.16
    서버 사이드 렌더링, 클라이언트 사이드 렌더링  (0) 2020.12.06
    React Router(v4)  (0) 2020.12.06
    SQL  (0) 2020.12.02

    댓글