Почему атомы не собираются ЛУЧОМ?

Что ж, название говорит само за себя: мне интересно, по какой причине BEAM не собирает атомы в мусор. Мне известен вопрос Как атомы Erlang могут собирать мусор, но , но не отвечает на вопрос почему.


person mszmurlo    schedule 10.06.2021    source источник
comment
Я полагаю, потому что GC (erlang использует однопроходный сборщик мусора в режиме реального времени с маркировкой и разверткой между поколениями) предназначен для каждого приложения, а таблица атомов используется глобально для каждой виртуальной машины.   -  person Aleksei Matiushkin    schedule 10.06.2021


Ответы (1)


Потому что это невозможно (или, по крайней мере, очень сложно) сделать в текущем дизайне. Атомы являются важной частью:

  • модули, так как имена модулей являются атомами
  • имена функций, которые также являются атомами
  • распределенный Erlang также широко использует атомы

Особенно последний пункт усложняет. Представьте на секунду, что у нас будет GC для атомов. Что произойдет, если между распределенными вызовами будет выполняться очистка GC, когда мы отправляем несколько атомов по сети? Все это делает атомы очень важными для работы VM, и создание их GCed не только сделает реализацию VM намного сложнее, но также сделает код намного медленнее, поскольку атомы не нужно копировать между процессами, и поскольку они не GCed , их можно полностью исключить на шаге GC mark.

person Hauleth    schedule 12.06.2021