Когда именно перезаписанные переменные собираются мусором? - PullRequest
2 голосов
/ 22 сентября 2019

При перезаписи переменных во время итеративного задания, когда именно эта переменная собирает мусор?Например, скажем, у нас есть функция с интенсивным использованием памяти, some_function().Эта функция также возвращает большой объект, data.

def some_function(x):
    ...
    return data

Если эта функция вызывается во время некоторого итеративного задания, например,

for x in some_iterable:
    output = some_function(x)

Получает ли новая переменная outputмусор, собранный, как только some_function() называется?Или он освобождает память только когда возвращается новое значение?Я забочусь только об освобождении памяти в ядре, а не обязательно в системе (поэтому я могу неправильно использовать термин сборщик мусора).

1 Ответ

1 голос
/ 22 сентября 2019

Когда данные больше недоступны, сборщик мусора Python в фоновом режиме помечает память как доступную для последующих выделений.Однако оно не освобождается в отношении ядра.

Если вас волнует то, когда ядро ​​делает доступной физическую память другим процессам, это другое дело: память по-прежнему фактически отображаетсяв адресное пространство вашего процесса Python, поэтому для того, чтобы ядро ​​освободило физическую память, необходимо либо завершить ваш процесс Python (таким образом освободив всю выделенную ему физическую память), либо физическую память, в которой ранее содержались ваши данныедолжно стать наименее недавно использованным в соответствии с политикой виртуальной памяти ядра.Если нет других процессов, конкурирующих за него (вероятно, в системе с несколькими гигабайтами), это может занять много времени.Если есть другие процессы, конкурирующие за физическую память, это может произойти через несколько секунд или минут.Кроме того, если ваш процесс Python выделяет больше данных, внезапно эти страницы недавно используются снова, поэтому они становятся последними в очереди для физического восстановления.Если у вас слишком мало физической памяти, возможно, у вашей системы другие проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...