From b8b38dbf28c971635edd75121b9c00fdfd7d60a0 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 4 Oct 2026 11:30:00 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=94=B9=E5=86=99=E4=BA=94=E5=A4=84=20?= =?UTF-8?q?epoch=20=E6=82=AC=E5=9E=82=E6=B3=A8=E9=87=8A=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=85=A5=E5=8F=A3=E5=88=86=E9=85=8D=E8=AF=AD?= =?UTF-8?q?=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_vm/src/vm/mod.rs | 2 +- crates/oxide_vm/src/vm_support.rs | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/crates/oxide_vm/src/vm/mod.rs b/crates/oxide_vm/src/vm/mod.rs index f8e30e1f..b1f35af7 100644 --- a/crates/oxide_vm/src/vm/mod.rs +++ b/crates/oxide_vm/src/vm/mod.rs @@ -159,7 +159,7 @@ pub(crate) struct PendingAsyncEscape { /// 基于寄存器的 JS 虚拟机:持有执行状态、寄存器文件、调用栈与 session 内存。 /// -/// 执行入口为 [`Vm::run`](见 `vm_runtime` 模块);内存模型为 epoch arena + +/// 执行入口为 [`Vm::run`](见 `vm_runtime` 模块);内存模型为统一入口分配 + /// session 对象(可被 `SessionGc` 移动式回收)+ session 字符串。多数内部字段为 /// `pub(crate)`,对外提供统计与内省 getter。 pub struct Vm { diff --git a/crates/oxide_vm/src/vm_support.rs b/crates/oxide_vm/src/vm_support.rs index 7b441c81..c36fb526 100644 --- a/crates/oxide_vm/src/vm_support.rs +++ b/crates/oxide_vm/src/vm_support.rs @@ -330,7 +330,7 @@ impl Vm { /// 用于在多次 JS 执行之间达到完全隔离:session 内未被污染的 builtin 保留原指针。 pub fn full_reset(&mut self) { // 防御兜底:属性值写原语已推进 generation,常规覆盖写由快照对比发现; - // 若未来出现绕过属性写原语的裸属性区改写,session 对象会随 epoch 释放, + // 若未来出现绕过属性写原语的裸属性区改写,session 对象会被 session GC 回收, // 保留 global 将持悬垂指针,故带 session 对象时强制 bump 保证 global 重建。 if !self.gc_state.session_object_ptrs.is_empty() { let global_ptr = self.session.global_object().as_ptr() as *mut JsObject; @@ -466,7 +466,7 @@ impl Vm { // - 清空寄存器文件、pc、帧/迭代器栈、保存的执行栈、try 处理器、 // 待处理异常、native 调用深度与 IC 命中/未命中计数。 // - 保留 kernel 共享状态不变。 - // - `reset()` 额外清空 bytecode/constants 并重置 epoch 归属。 + // - `reset()` 额外清空 bytecode/constants 并重置 run 分配包络。 self.regs = [JsValue::undefined(); 256]; self.pc = 0; self.frames.clear(); @@ -483,7 +483,7 @@ impl Vm { self.cell_stack.clear(); self.try_stack.clear(); self.exception_value = None; - // 未捕获异常侧通道持原始 epoch 对象指针:执行期状态,跨 run/reset 不保留, + // 未捕获异常侧通道持原始 session 对象指针:执行期状态,跨 run/reset 不保留, // 池回收后残留将悬垂。 self.last_uncaught_value = None; self.pending_length_exception = None; @@ -728,8 +728,7 @@ impl Vm { JsValue::from_js_object(self.session.builtin_world().object_proto.as_ptr() as *mut JsObject) }; // prototype 子对象与函数本体同走 session 分配:`f.prototype === - // globalThis.f.prototype` 要求两侧同一对象,epoch 分配会在逃逸写时 - // 被递归克隆出第二份。 + // globalThis.f.prototype` 要求两侧同一对象,逃逸写不会克隆出第二份。 let prototype = JsObject::new_empty(EMPTY_SHAPE_ID, proto_of_proto); let prototype_obj = self.alloc_session_object(prototype); let prototype_val = JsValue::from_js_object(prototype_obj);