Список ссылок - память // PYTHON [дубликат]

echo "export PATH=\$PATH:/Users/${USER}/Library/Android/sdk/platform-tools/" >> ~/.bash_profile && source ~/.bash_profile

Если вы поместите папку android-sdks в другой каталог, замените путь каталогом. android-sdks / platform-tools находится в

14
задан Matt Alcock 26 February 2012 в 02:51
поделиться

2 ответа

Вот выдержка из ссылки на язык

Объекты никогда не уничтожаются явно; однако, когда они становятся недостижимыми, они могут быть собраны в мусор. Реализация позволяет отложить сборку мусора или вообще опустить ее - это вопрос качества реализации, как реализуется сбор мусора, до тех пор, пока не будут собраны никакие объекты, которые еще доступны.

Подробности реализации CPython: CPython в настоящее время использует схему подсчета ссылок с (опционально) задержкой обнаружения циклически связанного мусора, который собирает большинство объектов, как только они становятся недоступными, но не гарантируется сбор мусора, содержащего циркуляр Рекомендации. Информацию об управлении сбором циклического мусора см. В документации модуля gc. Другие реализации действуют по-разному, и CPython может измениться.

EDIT: об отсрочке сбора мусора .... gc позволяет вам взаимодействовать с сборщиком мусора и отключать его, если вы хотите изменить частоту сбора и т. д. Но я не использовал его сам. Кроме того, циклы, содержащие любые объекты с __del__ методами , не собираются .

12
ответ дан Ioannis Filippidis 18 August 2018 в 19:31
поделиться
  • 1
    Приятно, хотя и довольно неопределенно. Любая идея, как вы испускаете или откладываете gc? – Matt Alcock 26 February 2012 в 02:45
  • 2
    Это другой вопрос Мэтт Алькок и ответ доступен. – erisco 26 February 2012 в 02:47
  • 3
    Часто высокопроизводительные системы хотят испускать gc для обеспечения согласованной производительности, представьте себе, что система управления полетом немного устарела, пока она делала сборку мусора? – Matt Alcock 26 February 2012 в 03:06
  • 4
    @MattAlcock Добавлены сведения о модуле gc в сообщении. – Praveen Gollakota 26 February 2012 в 03:07
  • 5
    @MattAlcock: Часто высокопроизводительные системы не используют любое распределение динамической памяти любого типа. Когда я делал радары и гидролокаторы, структуры данных были строго статически распределены. Сама идея использования любого динамического распределения памяти в высокопроизводительной системе кажется противоречивой. Отключение сборки мусора в Python традиционно делается путем написания критически важного кода на C и вызова этого из Python. – S.Lott 26 February 2012 в 07:54

Когда объекты мусора собраны в python?

В исходном коде для CPython много деталей: http://svn.python.org/view/python/trunk/ Модули / gcmodule.c? Revision = 81029 & amp; view = markup

Каждый раз, когда счетчик ссылок падает до нуля, объект немедленно удаляется.

293 / * Циклический gc Python никогда не должен видеть входящий refcount

294 * of 0: если что-то уменьшилось до 0, оно должно было быть

295 * немедленно освобождено в это время.

Полная коллекция запускается, когда число новых объектов превышает 25% от числа существующих объектов.

87 В дополнение к различным настраиваемым пороговым значениям мы запускаем только полную коллекцию

88, если отношение

89 long_lived_pending / long_lived_total

90 находится выше заданного значения (с привязкой к 25%).

Когда освобождена память?

Я смог вытащить эту информацию .

781 / * Очистить все свободные списки

782 * Все бесплатные списки удаляются во время сбора самого высокого поколения.

783 * Выделено элементы в свободном списке могут содержать занимаемую арену pymalloc.

784 * Удаление бесплатных списков может вернуть память ранее.

785 * /

В соответствии с этим Python может хранить ваш объект в свободном списке для повторной переработки, даже если вы отбросите его refcount на ноль. Я не могу явно найти, когда бесплатный вызов выполняется, чтобы вернуть память в операционную систему, но я полагаю, что это делается всякий раз, когда создается коллекция, и объект не хранится в свободном списке.

Эффект влияет на производительность?

Любой нетривиальный сборщик мусора, о котором я слышал, требует как процессора, так и памяти. Поэтому да, всегда есть влияние на производительность. Вам нужно будет поэкспериментировать и познакомиться с вашим сборщиком мусора.

Программы, требующие оперативной реакции в реальном времени. Я столкнулся с проблемами, поскольку сборщики мусора не дают мне контроля над тем, когда они запускаются или для чего они долго. Некоторые специфические случаи могут вызвать чрезмерное использование памяти, примером может быть умение Python для хранения свободных списков.

12
ответ дан erisco 18 August 2018 в 19:31
поделиться
Другие вопросы по тегам:

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