fitzgen opened issue #14615:
For profiling
"Why is the program spending so much time in GC?" aka "where am I allocating all this stuff that is forcing GC?"
We should support sampling the stack on GC allocation. These samples can then be coalesced and displayed as a tree or flamegraph, similar to how time/cpu profiling is often displayed.
Not all GC allocations are equal: a cons cell is cheaper than a large array. So we want to check whether we should sample the stack per byte allocated and not per object allocated. We can use https://github.com/fitzgen/fast-bernoulli for this.
The firefox profiler supports allocation stack sampling, so I presume its data format does as well, and we could maybe reuse it for this here too.
For debugging
"Why is my GC heap usage so high?"
"What is keeping this large object alive?"
We should be able to serialize the GC heap into an on-disk format that we can then run analyses on to answer questions like:
- What are the objects taking up the most space in the GC heap?
- Why is this object, that I would have expected not to be in use anymore and reclaimed by the collector, still live in the GC heap?
- What is unintentionally retained (i.e. the GC version of "leaked") after the program does X?
(1) is best answered by (a) a dominator tree analysis and ranking an object by its retained size (as opposed to its self size), and (b) taking a census and categorizing objects by type or allocation site and displaying them as a treemap.
(2) is best answered by an analysis that reports the N shortest paths from a GC root to the object of interest.
(3) is best answered by diffing heap snapshots before and after repeatedly doing X.
I don't know if there is any popular tool that has a stable heap snapshot format where we can just serialize our heap graph into that format and then it runs these analyses for us and displays their results in a UI for us.
I built the Firefox DevTools's memory tool, and we could reuse its protobuf heap snapshot serialization format to allow importing our heap snapshots into its UI, but this wouldn't be quite as slick as the firefox profiler experience, because the memory tool doesn't exist as a standalone web page, you'd have to open up the firefox devtools and manually import the snapshot(s).
Maybe there is a standalone alternative I'm not aware of?
fitzgen added the enhancement label to Issue #14615.
fitzgen added the wasm-proposal:gc label to Issue #14615.
Last updated: Oct 11 2026 at 04:10 UTC