Что ж, название говорит само за себя: мне интересно, по какой причине BEAM не собирает атомы в мусор. Мне известен вопрос Как атомы Erlang могут собирать мусор, но , но не отвечает на вопрос почему.
Почему атомы не собираются ЛУЧОМ?
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