Когда ты удаляешь большой объект в Python, использование памяти на уровне ОС часто остаётся высоким. Это ожидаемое поведение, а не баг.
CPython использует собственный аллокатор памяти (построенный на основе pymalloc), который управляет памятью в пулах и аренах. Когда объект удаляется:
Такой дизайн улучшает производительность, избегая повторных дорогостоящих системных вызовов для выделения и освобождения памяти.
CPython использует подсчёт ссылок как основную стратегию управления памятью. Когда счётчик ссылок объекта падает до нуля, он немедленно освобождается. Однако:
gc.collect() запускает сборщик циклического мусора для разрешения этих цикловimport gc
del large_object
gc.collect() # Разрешает циклические ссылки
Даже после gc.collect() память на уровне ОС может остаться высокой.
tracemalloc или memory_profiler для проверки аллокаций на уровне Python, а не только метрик ОСctypes.malloc_trim(0) на Linux или запускать тяжёлые задачи в подпроцессах, которые полностью освобождают память при выходеВысокое использование памяти на уровне ОС после удаления вызвано внутренним пулингом памяти Python, а не утечкой памяти.
Аллокатор памяти pymalloc в Python сохраняет освобождённую память в пулах, чтобы избежать дорогостоящих повторных системных вызовов, поэтому использование памяти на уровне ОС остаётся высоким после удаления объектов.
Новый — ещё не проверен сообществом
Вы