JavaScript 엔진은 JavaScript 코드를 실행하는 핵심 구성 요소로, 브라우저 및 런타임 환경(Node.js 등)에서 동작한다. JavaScript 코드를 해석하고 실행하며, 성능 최적화를 위해 Just-In-Time(JIT) 컴파일러를 활용한다.
JavaScript 엔진은 텍스트 기반의 JavaScript 코드를 바이트코드(Bytecode) 또는 기계어(Machine Code)로 변환하여 실행하는 프로그램이다.
JavaScript 엔진은 브라우저 및 다양한 환경에서 동작하며, 대표적인 엔진은 다음과 같다:
- V8 (Google Chrome, Node.js)
- SpiderMonkey (Mozilla Firefox)
- JavaScriptCore (Apple Safari)
- Chakra (Microsoft Edge - 레거시 버전)
- Parsing (구문 분석): JavaScript 코드를 해석하고 AST(Abstract Syntax Tree, 추상 구문 트리) 를 생성한다.
- Compilation (컴파일): AST를 바탕으로 바이트코드(Bytecode)를 생성한다.
- Execution (실행): 바이트코드를 실행하면서 JIT(Just-In-Time) 컴파일러를 통해 기계어로 변환한다.
- Memory Management (메모리 관리): 가비지 컬렉션(Garbage Collection)을 수행하여 메모리를 효율적으로 관리한다.
- Optimization (최적화): 실행 중 최적화(Optimizing JIT)를 수행하여 반복 실행되는 코드를 효율적으로 처리한다.
- Parsing → AST 생성: 소스 코드를 분석하여 추상 구문 트리를 만든다.
- Bytecode 변환: AST를 기반으로 바이트코드를 생성한다.
- JIT 최적화: 실행 중 핫 코드(Hot Code)를 감지하여 기계어로 변환하고 성능을 향상시킨다.
- Deoptimization (최적화 해제): 예상치 못한 코드 실행 패턴이 발생하면 최적화된 코드를 폐기하고 다시 인터프리터 방식으로 실행한다.
issue: Related issue in this repo
author note: Related note in this repo
link: External reference