more than better
로그인
more than better
로그인
V8 엔진
rada
·
2025년 4월 6일
팔로우
0
V8 엔진
v8
0
V8 엔진이란?
🔧 V8 기본 개요
언어 처리 과정
🧠 컴포넌트 레벨
1. Ignition (인터프리터)
2. TurboFan (JIT 컴파일러)
3. Orinoco (Garbage Collector)
🧬 나노레벨 구조
🔹 바이트코드 (Ignition Bytecode)
🔹 IR (Intermediate Representation) in TurboFan
🔹 Inline Caches (IC)
🔹 Hidden Classes
🔹 Deoptimization
🔥 내부 메모리 관리
📦 실전 디버깅/분석 도구
개발
목록 보기
30/48
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 등)
rada
So that my future self will not be ashamed of myself.
팔로우
이전 포스트
ScopeInfo란?
다음 포스트
v8 디컴파일
0개의 댓글
댓글 작성