V8 엔진이란?

🔧 V8 기본 개요

  • Google에서 개발한 오픈소스 JavaScript 엔진
  • Chrome, Node.js, Deno 등에 사용됨
  • JavaScript 코드를 바이트코드나 네이티브 머신 코드로 변환해 실행

언어 처리 과정

  • 파싱 (Parsing): JavaScript → AST(Abstract Syntax Tree)
  • 인터프리팅: AST → 바이트코드 (Ignition)
  • 컴파일링: 바이트코드 → 네이티브 머신 코드 (TurboFan)

🧠 컴포넌트 레벨

1. Ignition (인터프리터)

  • 빠른 시작을 위한 경량 인터프리터
  • 바이트코드로 변환하여 실행
  • 빠른 시작과 적은 메모리 사용이 강점

2. TurboFan (JIT 컴파일러)

  • 바이트코드를 머신 코드로 변환
  • 성능 최적화의 핵심
  • 다양한 중간 표현(IR)을 거쳐 고도 최적화 진행

3. Orinoco (Garbage Collector)

  • 병렬, 증분식 GC 시스템
  • Young/Old Generation 나눠서 관리
  • Low-latency를 위한 GC 전략 사용

🧬 나노레벨 구조

🔹 바이트코드 (Ignition Bytecode)

  • 각 바이트코드는 1바이트 Opcode + N바이트 피연산자 구조
  • 레지스터 기반 가상 머신처럼 동작
  • 예: LdaZero → 누산기에 0을 로드

🔹 IR (Intermediate Representation) in TurboFan

  • TurboFan은 최적화를 위해 여러 IR 단계 사용:
  • Bytecode → Sea of Nodes (초기 IR)
  • Mid-tier Optimizations (Loop unrolling, Constant folding 등)
  • Machine IR (머신에 맞게 변환)
  • Code Generation (x86/ARM 등으로 컴파일)

🔹 Inline Caches (IC)

  • 자바스크립트의 동적 타입을 최적화하기 위한 캐싱
  • 예: obj.prop 접근 시 객체 구조를 기록해서 다음 접근을 더 빠르게 처리

🔹 Hidden Classes

  • 동적 객체를 정적 클래스처럼 관리해 속도 향상
  • 객체 프로퍼티가 바뀌면 Hidden Class 체인도 변경됨

🔹 Deoptimization

  • 최적화된 코드가 잘못된 가정을 기반으로 작동하면 원래 바이트코드로 돌아감 (deopt)

  • “Speculative Optimization” 기반, 잘못되면 복구

🔥 내부 메모리 관리

  • Heap 구조: Young, Old, Large object 공간
  • Allocation Buffer로 객체 할당 속도 최적화
  • GC 트리거 조건도 복잡함 (Old generation promotion 등)

📦 실전 디버깅/분석 도구

  • --trace-opt, --trace-deopt: 최적화/비최적화 로그 확인
  • --print-bytecode: 바이트코드 보기
  • --allow-natives-syntax: V8 내부 함수 직접 호출 가능 (%OptimizeFunctionOnNextCall 등)
profile
So that my future self will not be ashamed of myself.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN