Почему мы должны заботиться о памяти?

  • Это заставляет нас быть лучшими (более изобретательными) программистами.
  • Памяти не хватает, и хотя объем памяти, доступной на машинах, за последние пару десятилетий увеличился, растут ожидания людей относительно того, что могут делать их машины. Ваши пользователи ожидают, что ваше приложение справится с их многозадачными рабочими процессами. Пользователи ожидают и заслуживаютбогатых интерактивных веб-приложений, и эти вещи, как правило, очень интенсивно используют память, поэтому помогает нам тренировать мышцы сопереживания.

Память выделяется в структуре кучи

  • Красный узел — это корневой узел. Это что-то вроде объекта окна (или глобального объекта в узле).
  • Зеленые узлы — это ваши «ценности».
  • Блюз — это отсылки к этим вещам.

Откуда мы знаем, что чистить?

Основой для этого является Достижимость, поэтому мы определяем, что считается мусором, проходя через нашу кучу.

Как собирают мусор в «новом пространстве»?

Это процесс под названием «Очистка». Как правило, память в новом пространстве собирается быстрее, чем память в старом пространстве.
Когда ваше новое пространство заполнено, двигатель V8 продолжит работу и начнет очищать цикл GC в новом пространстве и что произойдет. в этом процессе очистки ваш GC будет проходить через всю вашу кучу, копируя все по пути и, наконец, очищая то, что ранее было в новом пространстве. и поскольку данные в новом пространстве представляют собой более молодые меньшие данные, проблема сложности пространства (требующая двойного объема пространства из-за процесса копирования) не так уж важна.

А как насчет «старого пространства»?

Существует и другой метод, который называется "метить и пролистывать". Он работает, просматривая узлы, помечая те, которые активны, а затем удаляя непомеченные узлы…

  • Два вопроса для рассмотрения:

Сколько памяти использует мое приложение? (жесткого застывшего ответа вы не получите, но можете разработать какую-то метрику…)

Как часто в моем приложении возникают циклы GC (сборщика мусора)? (вы можете использовать Chrome devTools)