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