Skip to content
目录

1. 核心架构:Isolate、Context 与句柄

里讲 V8 架构,先抓住三个词:Isolate、Context、Handle

Isolate

Isolate 可以理解为一个独立的 JS 运行时实例,里面有堆、GC、编译状态、内建对象等资源。

常见回答:

  • 一个进程里可以有多个 Isolate,它们的 JS 堆通常彼此隔离。
  • 同一个 Isolate 不适合被多个线程同时进入,多线程场景需要 Locker 或者拆成多个 Isolate
  • Chrome、Node 都是通过嵌入 V8 API 创建和管理 Isolate

Context

Context 是一个 JS 执行上下文,重点是 全局对象和内建对象的隔离

可以这样区分:

  • Isolate 更像运行时实例,粒度大。
  • Context 更像一套全局环境,粒度小。
  • 同一个 Isolate 下可以有多个 Context,例如 iframe、沙箱执行环境等。

global proxy

V8 暴露给 JS 的 global 通常不是直接的真实 global object,而是 global proxy

它的作用是做安全隔离和嵌入层代理:浏览器可以控制你访问到的全局对象,同时 V8 内部仍能维护真实 global object 的结构假设。

Handle

C++ 侧不能直接长期保存裸的 V8 对象指针,因为 GC 可能移动对象,所以要通过句柄访问。

  • Local:短生命周期,配合 HandleScope 使用。
  • Persistent:跨 C++ 调用栈保存,使用后要释放,否则容易泄漏。
  • Traced:用于和 Chromium 的 C++ GC / cppgc 协作。

总结

Isolate 解决运行时隔离,Context 解决全局环境隔离,Handle 解决 C++ 与移动 GC 之间的引用安全问题。

MIT License.