Реагируйте на загрузку собственных изображений, не загружая изображения

Чтобы классифицировать вещи, давайте определим макет памяти, а затем поговорим о том, как работает GC.

Макет памяти

В Erlang каждый поток исполнения называется процессом. Каждый процесс имеет свою собственную память, а макет памяти состоит из трех частей: блок управления процессом, стек и куча.

  • PCB: процесс Контрольный блок содержит информацию, такую ​​как идентификатор процесса (PID), текущее состояние (работа, ожидание), его зарегистрированное имя и т. Д.
  • Stack: это растущая область памяти, которая поддерживает входящие и исходящие параметры , возвращать адреса, локальные переменные и временные пробелы для оценки выражений.
  • Куча: это растущая область памяти, которая содержит сообщения почтового ящика процесса и составные термины. Двоичные термины, размер которых превышает 64 байта, НЕ хранятся в частной куче процесса. Они хранятся в большой Shared Heap, доступной для всех процессов.

Сбор мусора

В настоящее время Erlang использует коллекцию мусора Generational, которая работает внутри каждого Erlang обрабатывать частную кучу независимо, а также собирать сборку ссылок Counting для глобальной общей кучи.

  • Private Heap GC: Это поколение, поэтому делит кучу на два сегмента: молодое и старое поколение. Также есть две стратегии для сбора; Генерация (Малая) и Fullsweep (Major). Генерация GC просто собирает молодую кучу, но fullsweep собирает как молодую, так и старую кучу.
  • Общая куча GC: Это подсчет ссылок. Каждый объект в общей куче (Refc) имеет счетчик ссылок на него, хранящийся другими объектами (ProcBin), которые хранятся внутри частной кучи процессов Erlang. Если контрольный счетчик объекта достигает нуля, объект становится недоступным и будет уничтожен.

Чтобы получить более подробную информацию и рекомендации по производительности, просто взгляните на мою статью, которая является источником ответ: Подробности коллекции мусора Эрланг и почему это имеет значение

0
задан Andrew 27 February 2019 в 15:26
поделиться