Рубрики
Без рубрики

Коллекция мусора Python (Python GC)

Коллекция мусора Python, Python GC, управление памятью Python, Python GC.COGLECT Performance, Python Reference Counting, Python __del__ Функция, Коллекция мусора Python GC.

Автор оригинала: Pankaj Kumar.

Коллекция мусора Python – это механизм управления памятью в Python. Давайте посмотрим на разные аспекты сборки мусора и как работает коллекция мусора Python.

Что такое сборщик мусора?

Сборка мусора – это процесс очистки общего компьютера памяти, которая в настоящее время должна использоваться запущенной программой, когда эта программа больше не нуждается в этой памяти. С сборкой мусора этот кусок памяти очищается так, что другие программы (или же программа) могут использовать его снова.

Сборка мусора – это функция управления памятью во многих языках программирования. В этом уроке мы изучаем, как этот механизм работает в Python.

Коллекция мусора Python

Давайте изучим сборную мусор Python с помощью примера:

class User(object):
    def __del__(self):
        print("No reference left for {}".format(self))

user1 = User()
user2 = user1
user3 = user1

В этом примере мы сделали класс и 3 опорных переменных, указывающих на тот же объект. Давайте визуализируем это:

Теперь мы позволяем переменным User1, User2 и User3 указать None вместо пользовательского экземпляра.

>>> user1 = None
>>> user2 = None
>>> user3 = None
No reference left for <__main__.User object at 0x212bee9d9>

С вышеуказанным кодом ссылки изменились на:

После того, как мы присваиваем последнюю переменную User3 к Нет Объект является собранным мусором, и это называет __del__ функция.

Как сборка мусора варьируется в зависимости от реализации

Коллекция мусора – это механизм, который варьируется в зависимости от реализации Python, как CPYthon, Jython или IronPython.

  • C Реализация Python использует ссылку на отслеживание недоступных объектов. Вместо этого он не отслеживает объекты на каждой строке выполнения, он периодически выполняет алгоритм обнаружения цикла, который ищет недоступных объектов и очищает их.
  • Jython использует сборщик мусора JVM. То же самое относится к Ironpython, который использует сборщик мусора CLR

Если вы хотите учиться о GC интерфейс Посмотрите на документы Python.

Коллекция мусора Python Force

Как мы изучали выше, сборка мусора работает автоматически, так как программа находится под выполнением, иногда мы можем захотеть запустить сборку мусора в определенное время. Мы можем сделать это, позвонив собирать () функция. Давайте попробуем определить LinkedList класс, чтобы продемонстрировать это:

class LinkedList(object):
    def __init__(self, name):
        self.name = name
        self.next = None
    def set_next(self, next):
        print('Linking nodes %s.next = %s' % (self, next))
        self.next = next
    def __repr__(self):
        return '%s(%s)' % (self.__class__.__name__, self.name)

Как только это сделано, мы можем начать строить свои объекты и вызвать сбор мусора вручную:

# Constructing a circular LinkedList
a = LinkedList('1')
b = LinkedList('2')
c = LinkedList('3')
a.set_next(b)
b.set_next(c)
c.set_next(a)

# Remove references to the LinkedList nodes in this module's namespace
a = b = c = None

# Show the effect of garbage collection
for i in range(2):
    print('Collecting %d ...' % i)
    n = gc.collect()
    print('Unreachable objects:', n)
    print('Remaining Garbage:', pprint.pprint(gc.garbage))
    print

Когда мы запускаем это, выход будет:

В этом примере объекты циклического LinkedList очищаются, как только коллекция Garbrge работает в первый раз.

Сводка коллекции мусора Python

Здесь давайте предоставляем некоторые конечные способы, через которые мы можем оптимизировать использование мусора:

  • Не заставляйте собирать мусор слишком много раз. Это связано с тем, что даже если они освобождают память, он все еще требует времени для оценки права на предмет мусора.
  • Если вы хотите вручную управлять сборкой мусора в своем приложении, начните делать это только после того, как приложение полностью запущено, а затем продолжить делать это в устойчивых операциях.

Коллекция мусора – это сложный механизм, если управляется вручную. Чтобы получить правильно, внимательно изучите контракт.