Сборка "мусора" в Perl

В отличие от Java, Perl использует подсчет ссылок для сборки "мусора". Я попытался искать некоторые предыдущие вопросы, которые говорят о C++ RAII и интеллектуальные указатели и Java GC, но не поняли, как Perl имеет дело с круговой проблемой ссылки.

Кто-либо может объяснить, как сборщик "мусора" Perl имеет дело с циклическими ссылками? Там какой-либо путь состоит в том, чтобы исправить память проспекта, на которую ссылаются, которые больше не используются программой, или Perl просто игнорирует эту проблему в целом?

14
задан srikfreak 4 June 2010 в 06:46
поделиться

3 ответа

Согласно моей копии Programming Perl 3rd ed. , на выходе Perl 5 делает «дорогую отметку и зачистку», чтобы восстановить круговые ссылки. Вы должны избегать циклических ссылок, насколько это возможно, потому что в противном случае они не будут восстановлены до тех пор, пока программа не выйдет из нее.

Perl 5 предлагает слабые ссылки через модуль Scalar::Utils.

Perl 6 перейдет на подключаемую схему сбора мусора (ну,базовая виртуальная машина будет иметь несколько параметров сборки мусора, и поведение этих параметров может повлиять на Perl). То есть вы сможете выбирать между различными сборщиками мусора, либо реализовывать свои собственные. Хотите коллекционер копий? Уверенный. Хотите коллекционера раскрасок? Молодец. Маркировка/развертка, уплотнение и т.д.? Почему бы нет?

13
ответ дан 1 December 2019 в 15:11
поделиться

Посмотрите на Прокси-объекты

1
ответ дан 1 December 2019 в 15:11
поделиться

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

-8
ответ дан 1 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: