ObjectSpace.dump_all should allocate as little as possible in the GC heap
For context I'm working on a heap profiler. In short the use case is like this (pseudo code):
GC.disable ObjectSpace.dump_all(output: file1) # run the user code ObjectSpace.dump_all(output: file2) compute_the_diff_and_report_statistics(file1, file2)
Ideally I would need
ObjectSpace.dump_all to not modify the GC heap at all so that an empty user code would report an empty diff.
However as showcased in this test case,
dump_all(output: <#File:/path.json>) currently allocates 4 objects:
Fileinstance passed as
output:is re-opened by
dump_outputand I don't quite understand why.
Hashinstance. Would using the new
Primitiveinterface avoid that?
- Another hash is allocated but I'm unsure where it comes from.
IMEMO "imemo_type"=>"callcache"is allocated. Surprisingly it can be avoided by calling
Could any of these be eliminated?
Updated by byroot (Jean Boussier) 4 months ago
- Status changed from Open to Closed
Applied in changeset git|fbba6bd4e3dff7a61965208fecae908f10c4edbe.
Parse ObjectSpace.dump_all / dump arguments in Ruby to avoid allocation noise
[Feature #17045] ObjectSpace.dump_all should allocate as little as possible in the GC heap
Up until this commit ObjectSpace.dump_all allocates two Hash because of
It also can allocate a
File because of
These allocations are problematic because
dump_all dumps the Ruby
heap, so it should try modify as little as possible what it is