Что делает CPYHON, чтобы помочь определить объектные циклы (подсчет ссылки)?

StackOverflow https://stackoverflow.com/questions/3797220

Вопрос

Из того, что я прочитал о CPYthon, похоже, что это имеет значение ссылки + что-то дополнительно для обнаружения / свободных объектов, указывающих друг на друга. (Исправьте меня, если я ошибаюсь). Может кто-то объяснить что-то дополнительное? Также эта гарантия * без цикла утечки? Если нет, есть ли исследование в алгоритме, доказано, чтобы добавить к ссылке, чтобы сделать его никогда не утечкой *? Будет ли это просто управлять без ссылки, отсчитывая трассировку GC каждый так часто?

* Удаление ошибок и проблемы с модулями с использованием интерфейса внешнего функционала

Это было полезно?

Решение

Как объяснено в документации для gc.garbage, нет никакой гарантии, что утечки не происходят; В частности, циклические объекты с __del__ Методы не собираются по умолчанию. Для таких объектов циклические ссылки должны быть разбиты вручную, чтобы включить дальнейшее GC.

От того, что я понимаю, просматривая Cpython Sourcecode, Переводчик содержит ссылки на все объекты под его контролем. «Дополнительный» сборщик мусора запускает алгоритм Mark-and-Show-Algorith через кучу, помнит для каждого объекта, если он достигается от «снаружи» и, если нет, удаляет его. (ГХ генерация, но это может быть явно запущено от gc модуль с A. generation аргумент.)

Единственный эффективный алгоритм, который я мог подумать о том, что удовлетворяет вашим критериям, действительно будет «полным» алгоритмом GC для подсчета ссылок GC, и это то, что, по-видимому, реализуется в Python. Я не эксперт по этим вопросам, хотя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top