Say you have a long-running task that writes to dynamically-sized non-GC'd buffers. Those buffers may increase in size after the parent cell moves from eden -> old space. This size increase would not be reported to the GC, causing extra memory to be under-reported to the GC. The pattern of calling Heap::reportExtraMemoryAllocated and Heap::reportExtraMemoryVisited doesn't quite work for this case because the allocated size is dynamic. Concrete example: streaming an HTTP response body. Each write from JS might have a delay and might need to be buffered. If the buffer doesn't have enough space, the buffer will grow, but the memory growth won't be reported to the garbage collector since the memory growth happened in native code after the initial allocation.
<rdar://problem/116512291>