Actions
Feature #17045
closedObjectSpace.dump_all should allocate as little as possible in the GC heap
Feature #17045:
ObjectSpace.dump_all should allocate as little as possible in the GC heap
Status:
Closed
Assignee:
-
Target version:
-
Description
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:
- The
Fileinstance passed asoutput:is re-opened byrb_io_stdio_fileindump_outputand I don't quite understand why. - The
scan_argsindump_allallocates aHashinstance. Would using the newPrimitiveinterface avoid that? - Another hash is allocated but I'm unsure where it comes from.
- An
IMEMO "imemo_type"=>"callcache"is allocated. Surprisingly it can be avoided by callingObjectSpace.dump_all(**opts)
Could any of these be eliminated?
Actions