Files
2nd/10_Wiki/Topics/Frontend/V8 JavaScript Engine.md
T
koriweb d8a80f6272 chore(wiki): dangling 링크 canonical 정규화 (768파일/1200건)
이름만 다른(표기 변형) [[위키링크]]를 대상 문서의 canonical 제목으로 치환해
끊겼던 1,200개 링크를 연결. 제목/파일명 정규화 일치만 적용하고 별칭 매칭은
과병합 위험으로 제외(애매성 가드). 원본은 _link_reconcile_backup/ 에 백업.
도구: Datacollect/scripts/link_reconcile_apply.mjs

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:24:15 +09:00

3.9 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-v8-javascript-engine V8 JavaScript Engine 10_Wiki/Topics verified self
V8
V8 Engine
Chrome V8
none A 0.9 applied
v8
javascript
engine
runtime
chrome
node
2026-05-10 pending
language framework
C++ V8

V8 JavaScript Engine

매 한 줄

"매 Ignition interpreter + TurboFan / Maglev / Sparkplug 의 매 multi-tier JIT 으로 매 JS 를 native 수준에 도달시키는 엔진". 매 Chrome / Edge / Node.js / Deno 의 핵심. 매 2026 기준 Maglev (mid-tier JIT) 와 매 pointer compression 으로 매 startup + memory 모두 개선됨.

매 핵심

매 Multi-tier compilation

  • Ignition — bytecode interpreter (fastest startup).
  • Sparkplug — non-optimizing baseline JIT (V8 9.1+).
  • Maglev — mid-tier optimizing JIT (V8 11.5+, default 11.9+).
  • TurboFan — top-tier optimizer (slow compile, fast run).

매 Hidden classes & inline caches

  • 매 JS object 의 매 shape 추적 (V8 internal "Map").
  • 매 same-shape access 는 매 monomorphic IC 로 매 native 속도.
  • 매 shape 변경 (속성 추가 순서 다름) 매 → polymorphic / megamorphic.

매 GC

  • Generational: young (scavenger, Minor MC) + old (Mark-Compact, Mark-Sweep).
  • Orinoco — concurrent / parallel / incremental.
  • Pointer compression (V8 8.0+) — 35-40% heap 절감.

매 응용

  1. Browser JS — Chrome, Edge.
  2. Server JS — Node.js, Deno (V8 기반).
  3. Embedded — Electron, CEF.

💻 패턴

Hidden class 친화적 객체

// Good — same shape
function User(id, name) { this.id = id; this.name = name; }

// Bad — shape diverges
function User(id, name) { this.id = id; if (name) this.name = name; }

Monomorphic call site

function getX(point) { return point.x; }
// pass only one shape consistently → IC stays monomorphic
const points = Array.from({ length: 1e6 }, (_, i) => ({ x: i, y: i }));
points.forEach(getX);

Avoiding deopt

function add(a, b) { return a + b; }
add(1, 2);     // optimized for number
add('a', 'b'); // deopt — TurboFan must reoptimize

V8 inspector / profiling

node --inspect-brk app.js
# Chrome devtools → Performance → JS samples

V8 flags for diagnosis

node --trace-opt --trace-deopt app.js
node --print-bytecode app.js
node --allow-natives-syntax  # %OptimizeFunctionOnNextCall

Pointer compression check

node -p "process.config.variables.v8_enable_pointer_compression"
# 1 → enabled

매 결정 기준

관심사 Approach
Startup 빠름 Ignition / Sparkplug 충분
Hot loop Maglev / TurboFan 의 monomorphic 유지
Memory tight pointer compression + young GC tuning
Diagnose perf --trace-deopt, clinic flame

기본값: 매 modern V8 default — 매 micro-opt 보다 매 algorithmic 우선.

🔗 Graph

🤖 LLM 활용

언제: 매 perf 분석 가설 세우기, 매 deopt 원인 추정. 언제 X: 매 V8 internal 변경 빠름 — 매 매 latest blog 확인 필요.

안티패턴

  • Shape divergence: 매 conditional property 추가 — 매 polymorphic 유발.
  • delete 연산자: 매 hidden class transition 강제.
  • arguments 변형: 매 deopt 유발.
  • Try/catch in hot path: 매 V8 ≤ 7.x 까진 deopt — 매 modern V8 은 ok 이나 매 case-by-case.

🧪 검증 / 중복

  • Verified (V8 official blog v8.dev, "Maglev" announcement).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — Maglev + pointer compression 반영