Under The Hood
frontend bun Bun 1.x (WebKit JavaScriptCore)

JavaScriptCore (JSC) vs V8 Architecture: FTL JIT, Tiering, and Memory Footprint

Last updated
Prerequisites:
V8 Engine architecture (Ignition/TurboFan)
JIT compilation basics
  • bun
  • javascriptcore
  • v8
  • jit
  • engine
  • performance
  • memory

Read at your depth

The practical view

Bun uses WebKit's JavaScriptCore (JSC) instead of Google's V8 (used by Node.js and Deno). JSC features a 4-tier JIT compilation pipeline: LLInt (Low-Level Interpreter), Baseline JIT, DFG (Data Flow Graph) JIT, and FTL (Faster Than Light) JIT. This multi-tiered approach prioritizes fast startup time and low memory consumption.

The same idea in other frameworks

node equivalent
Node.js running on V8 (Ignition interpreter + TurboFan JIT).

Legacy vs modern

Cold Boot Memory & Execution Latency

JSC in Bun boots in single-digit milliseconds with low memory; V8 in Node requires more initial allocation.

before → after
Node.js V8 Cold Boot
node script.js // ~30-50ms startup time, ~30MB base RSS memory
Bun JSC Cold Boot
bun script.js // ~3-5ms startup time, ~10MB base RSS memory

Interview gotchas

Context

Interviewers test your knowledge of runtime design trade-offs.

The mechanical answer

JSC was chosen for three primary reasons: (1) **Faster startup time**: JSC's LLInt interpreter starts executing code in single-digit milliseconds, critical for CLI tools and serverless cold starts. (2) **Lower memory usage**: JSC's compact structure tables and generational collector use 2-3x less base memory than V8. (3) **C/C++ API ergonomics**: JSC has clean C API bindings that made integration with Zig straightforward.

Trap

Do not claim that JSC has higher peak arithmetic throughput in all workloads; V8's TurboFan can match or outperform FTL in long-running continuous benchmarks, but JSC wins on startup and memory.

Under The Hood — a multi-depth technical interview hub.

Third-party licenses Press ⌘ K to search.