Skip to content

perf: reuse linked Atoms for static bytecode property names #7

Description

@Eric-Song-Nop

问题 / Problem

Static-name bytecode operations currently load a String constant and call intern_property_key_js_string every time they execute. In the fixed 20-million-property-read investigation this caused about 20 million intern calls; constant_property_key accounted for 33.45% inclusive sampled cycles. Atom-table deduplication avoids duplicate names but does not eliminate repeated hashing, string processing and lookup.

静态名称指令每次执行都从常量池取出字符串并重新 intern。固定 2,000 万次属性读取产生约 2,000 万次 intern;constant_property_key inclusive 采样占比为 33.45%。Atom 表去重无法消除重复哈希、字符串处理与查表。

Evidence / 证据: CPU report. Follow-up to #4; build on #6's array-key early check, implemented in Eric-Song-Nop#1.

修复 / Scope

  • Link static-name constants to runtime-local Atoms at bytecode publication; VM accesses reuse the mapping, including resumed activations. / 发布字节码时链接静态名称 Atom,VM 和恢复执行的帧直接复用。
  • Retain original String constants and serialized representation; rebuild mappings in each target Runtime. / 保留字符串常量与序列化形式,在目标 Runtime 重新链接。
  • Integrate Atom ownership, publication rollback and bytecode cleanup; validate mapping coverage and ownership. / 接入 Atom 所有权、失败回滚与字节码回收,校验映射覆盖及引用所有权。
  • Keep existing PropertyKey handle ownership in this first fix. / 第一轮保留现有 PropertyKey 引用管理。

验证 / Validation

Compare against perf/array-own-key-early-check@4e2e69b: relevant Rust tests, strict production Clippy, full Test262 outcome comparison; serial release before/after benchmarks for fixed property reads and Richards, plus publication-time and mapping-storage measurements. Keep diagnostics off for performance conclusions; do not assume the inclusive CPU share is an achievable speedup.

以数组优化分支 4e2e69b 为基线:相关 Rust 测试、生产目标 strict Clippy、完整 Test262 outcome 对照;固定属性读取和 Richards 的串行 release 对比,另测发布时间与映射存储开销。性能结论关闭诊断,不以 inclusive CPU 占比直接承诺收益。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions