mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
docs: kernel 残措辞与重建口径统一
This commit is contained in:
@@ -228,7 +228,7 @@ impl BuiltinWorld {
|
||||
}
|
||||
|
||||
/// wrapper 复用键的目标家族标签:目标对象是本 world 固定 P 字段时返回
|
||||
/// 其枚举下标 + 1(`all_p_fields` 顺序跨重建轮不变),非 P 目标返回 0。
|
||||
/// 其枚举下标 + 1(`all_p_fields` 顺序跨重建不变),非 P 目标返回 0。
|
||||
pub fn wrapper_family_of(&self, obj: *const JsObject) -> u16 {
|
||||
for (i, p) in self.all_p_fields().iter().enumerate() {
|
||||
if std::ptr::eq(p.as_ptr(), obj) {
|
||||
@@ -256,7 +256,7 @@ impl BuiltinWorld {
|
||||
/// # 注意事项
|
||||
/// session 收尾(`teardown_heap_data`)与选择性重建收尾(`retire_replaced`)
|
||||
/// 的 P 字段枚举唯一入口:`BuiltinWorld` 新增 P 字段须在此同步补一行,否则
|
||||
/// 收尾时该字段属性区永久泄漏、重建原型槽改写/释放漏掉该字段。
|
||||
/// 收尾时该字段属性区无法释放、重建原型槽改写/释放漏掉该字段。
|
||||
pub(crate) fn all_p_fields(&self) -> [&P<JsObject>; 104] {
|
||||
[
|
||||
&self.object_proto,
|
||||
|
||||
@@ -159,7 +159,7 @@ impl KernelCore {
|
||||
/// 注册表与 P 对象引用旧 kernel 的物化串裸指针与 shape id,VM 存活
|
||||
/// 期间重建会使它们悬垂。
|
||||
/// - 三个预设默认 `None`(永不触发):现有 CLI eval/run/REPL/bench/test262
|
||||
/// 宿主均未接重建边界,`None` 保证零行为漂移。
|
||||
/// 宿主在预设默认配置下均未接重建边界,`None` 保证零行为漂移。
|
||||
///
|
||||
/// # 副作用
|
||||
/// 无:只读查询。
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//! 每会话可变状态:内置原型对象(BuiltinWorld)与全局对象,full_reset 时
|
||||
//! 重建;世代快照 + 家族位脏集合计算,selective_reset 只重建脏家族。
|
||||
//! 每会话可变状态:内置原型对象(BuiltinWorld)与全局对象;世代快照 +
|
||||
//! 家族位脏集合计算,两条重置路径同走选择性重建,只重建脏家族。
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -12,9 +12,10 @@ use crate::shape_forge::EMPTY_SHAPE_ID;
|
||||
|
||||
use super::{BuiltinDirtySet, BuiltinId, BuiltinSnapshot, KernelCore};
|
||||
/// 每会话可变状态:内置原型对象与全局对象。
|
||||
/// 两条重建路径:full_reset() 整体重建,实现 JS 执行之间的完全隔离;
|
||||
/// selective_reset() 按世代快照的家族位脏集合只重建被污染的家族,保留
|
||||
/// 未污染的内置指针与世代。
|
||||
/// full_reset() 为宿主全隔离重置入口:清空全部执行状态与内存,内置对象
|
||||
/// 经下述选择性重建(未污染者保留原指针),并重新绑定被污染的内置对象
|
||||
/// 与重采世代快照;selective_reset() 为选择性重建本体,按家族位脏集合
|
||||
/// 只重建脏家族,保留未污染的内置指针与世代。
|
||||
pub struct KernelSession {
|
||||
pub builtin_world: Arc<BuiltinWorld>,
|
||||
pub global_object: P<JsObject>,
|
||||
@@ -226,7 +227,7 @@ impl KernelSession {
|
||||
pub fn selective_reset(&mut self, core: &Arc<KernelCore>) -> BuiltinDirtySet {
|
||||
let dirty = self.dirty_since_snapshot();
|
||||
if dirty.global {
|
||||
// 旧 global 的属性区在替换前释放,避免随旧引用永久泄漏。
|
||||
// 旧 global 的属性区在替换前释放,避免旧引用长期持有该内存。
|
||||
let old_global = unsafe { &mut *(self.global_object.as_ptr() as *mut JsObject) };
|
||||
old_global.release_raw_heap();
|
||||
self.global_object = Self::new_global_object(core);
|
||||
|
||||
@@ -373,8 +373,8 @@ unsafe impl Send for StringPtr {}
|
||||
unsafe impl Sync for StringPtr {}
|
||||
|
||||
/// ASCII 单字符永久 `JsString` 指针表:以字节值(0..=127)为下标,
|
||||
/// 首用惰性物化 `Box::into_raw` 永久泄漏,之后恒复用同一地址。
|
||||
/// 泄漏面严格有界:≤128 条目 × 单字符内容(≈8KB),进程生命周期内不释放。
|
||||
/// 首用惰性物化 `Box::into_raw` 有意保留,之后恒复用同一地址。
|
||||
/// 物化面严格有界:≤128 条目 × 单字符内容(≈8KB),进程生命周期内不释放。
|
||||
static SINGLE_CHAR_TABLE: [OnceLock<StringPtr>; 128] = [const { OnceLock::new() }; 128];
|
||||
|
||||
/// 取 ASCII 单字符的永久 `JsString` 指针,惰性物化一次后恒返回同一地址。
|
||||
|
||||
Reference in New Issue
Block a user