Immutable
release. Only release title and notes can be modified.
🔧 Fixes
- Passivated actors and grains are released from the passivation heap (#1317). The passivation heap shrank its queue slice without clearing the popped slot, so the backing array kept a strong reference to every passivated participant. Each retained entry pinned its PID together with the actor or grain instance, mailbox, and state for the lifetime of the actor system. Popped slots are now cleared, and passivating
50,000grains drops retained heap from about78 MBto about3 MB. The stream heaps that reorder parallel map results and merge sequence elements had the same defect and now clear popped slots as well.
⚡ Performance
- Lower per-actor heap footprint and GC mark cost at large resident populations (#1315, #1316). Spawned actors no longer eagerly allocate bookkeeping maps that usually stay empty,
SpawnChildno longer allocates a default supervisor and passivation strategy per child, the spawn path no longer allocates a logger that is immediately replaced, and metrics-enabled systems register a constant two meter callbacks instead of one per actor plus one. An idle child actor retains19.7%fewer bytes and24%fewer objects, flat spawns retain4.7%fewer bytes, and spawn/stop churn triggers9.8%fewer GC cycles.
🔀 Pull Requests
- #1316 perf: reduce per-actor heap footprint and GC mark cost by @Tochemey
- #1317 fix(actor): release popped passivation heap entries by @notrodans
Full Changelog: v4.5.1...v4.5.2