Выбор ответа Senior Память и сборка мусора обновлено

Гарантии FinalizationRegistry

Вопрос

Какое утверждение о колбэке FinalizationRegistry верное?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Может быть вызван сильно позже или не вызван вовсе: обязательную логику на нём не строят. Спецификация не гарантирует ни момент вызова, ни сам вызов: движок может отложить его надолго, а при закрытии страницы или завершении процесса колбэк может не выполниться.

Варианты ответа

  1. Вызывается синхронно в момент, когда на объект пропадает последняя ссылка
  2. Гарантированно вызывается до закрытия вкладки или завершения процесса Node
  3. Получает аргументом сам собранный объект, чтобы можно было освободить его поля
  4. Может быть вызван сильно позже или не вызван вовсе: обязательную логику на нём не строятправильный ответ

Разбор

Спецификация не гарантирует ни момент вызова, ни сам вызов: движок может отложить его надолго, а при закрытии страницы или завершении процесса колбэк может не выполниться. Аргументом приходит заранее зарегистрированное значение (held value), а не объект: объект к этому моменту уже собран. Поэтому реестр годится только для вспомогательной очистки, например внешних ресурсов, а освобождать важное нужно явно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.