From bug 197172 comment 36: > If you have a loop with: > > let p = new Promise((resolve, reject) => { > ... > reject(p) > }); > > p will be kept alive until the the microtasks are drained. Which means programs will OOM if they never drain all their microtasks... > > I think, at least, you'll need to clear handled promises at the GC flip. See where we call finalizeUnconditionalFinalizers. Given the WHATWG spec*, I don't believe this is something we can address for the normal, web-hosted case (i.e. the "unhandledrejection" event), but it would be a possible improvement for rejection tracking in a standalone JSContext (which has no spec). [*] https://html.spec.whatwg.org/multipage/webappapis.html#unhandled-promise-rejections