Actions
Feature #19730
closedRemove transient heap
Status:
Closed
Assignee:
-
Target version:
-
Description
GitHub PR: https://github.com/ruby/ruby/pull/7942
I'm proposing to remove the transient heap because Variable Width Allocation now supports all the types that were on the transient heap.
Arrays, objects, hashes, and structs were on the transient heap. After Variable Width Allocation:
- Arrays: allocated on the transient heap for very large arrays (>78 elements) or when elements are added and is too big for embedded.
- Objects: allocated on the transient heap for very large objects (>78 instance variables) or when new instance variables are added and is too big for embedded. However, classes store an estimate of the number of instance variables objects will have, which means that objects are usually allocated with the correct capacity.
- Hashes: no longer on the transient heap.
- Structs: allocated on the transient heap for very large structs (>78 elements).
As such, the cases where allocations are on the transient heap become rarer and thus no longer provide the performance benefits it once did. This is supported by the benchmark results below, where we see no performance change with the transient heap removed. However, we do see around a 5-10% decrease in memory usage for most benchmarks.
-------------- ----------- ---------- --------- ---------------------- ---------- --------- ------------------------- ------------------------
bench master (ms) stddev (%) RSS (MiB) no transient heap (ms) stddev (%) RSS (MiB) no transient heap 1st itr master/no transient heap
activerecord 71.9 2.4 58.2 71.9 2.2 53.4 1.00 1.00
chunky_png 822.7 0.2 45.7 837.0 0.2 47.4 0.98 0.98
erubi_rails 20.5 13.5 95.1 20.3 13.3 90.6 1.00 1.01
hexapdf 2525.8 0.7 173.1 2546.9 0.8 162.4 1.00 0.99
liquid-c 66.2 0.8 38.4 65.9 0.2 34.3 1.01 1.00
liquid-compile 60.2 1.7 36.6 60.4 1.4 32.6 1.02 1.00
liquid-render 165.0 0.2 37.2 164.7 0.2 33.1 1.01 1.00
mail 138.4 0.1 50.4 136.6 0.2 46.5 1.03 1.01
optcarrot 5232.2 0.7 62.9 5151.2 0.7 58.6 1.00 1.02
psych-load 2082.8 0.1 37.1 2059.4 0.1 32.2 1.01 1.01
railsbench 2066.2 0.1 103.6 2051.7 0.4 99.3 1.01 1.01
ruby-lsp 6.4 6.5 45.8 6.4 6.2 41.4 1.01 0.99
sequel 73.0 1.1 40.5 73.1 1.0 36.1 1.00 1.00
-------------- ----------- ---------- --------- ---------------------- ---------- --------- ------------------------- ------------------------
Actions
Like1
Like0Like0Like0