Я пытаюсь проверить кучу работающего приложения Express Node js.
При сравнении дампа кучи видно, что некоторые строки не освобождаются. Обещания, к которым они привязаны, разрешаются, но цепочка Retainers поднимается до глобальных дескрипторов, а затем до корней GC. Я не понимаю, что это значит.
Может ли кто-нибудь пролить свет на это? Почему сборщик мусора не может собрать эти разрешенные промисы?





Node содержит ссылку на каждое обещание, созданное при включении async_hooks, и на обещания, которые были отклонены, чтобы отображать необработанные предупреждения об отклонении.
PromiseWrap — это то, что использует async_hooks, и этот случайный массив — это массив, который использует отслеживание необработанного отказа.
Обратите внимание, что отслеживание необработанных отклонений нельзя отключить :(, но вы можете быть уверены, что они ответственно исправляются.
@Ali правильно, потому что узел все еще держит их внутри.
@snek, но означает ли это, что это форма утечки памяти или ее просто удерживают ради профилирования; т.е. использование флага --trace заставляет Node удерживать их?
Хорошо, но когда я запускаю GC, память не освобождается. Я использую флаг --inspect на node.js и chrome для создания этих куч