Из-за чего освобождение крупных объектов в CPython может не уменьшить RSS процесса?
База Hintsage
Память и производительность
Управление памятью, профилирование и оптимизация Python.
Практика
Вопросы: Память и производительность
В приложении RSS процесса растёт, но снимки tracemalloc почти не меняются: какой механизм это объясняет?
Как механизм copy-on-write позволяет процессу, созданному через fork, читать память родителя без немедленного полного копирования?
Как CPython обнаруживает и освобождает недостижимый цикл ссылок, который не удаляется одним подсчётом ссылок?
За счёт какого механизма __slots__ уменьшает память экземпляров Python-класса?
Объясните механизм, благодаря которому генератор обычно снижает пиковое потребление памяти при последовательной обработке данных.
В сервисе после добавления мемоизации память постоянно растёт, хотя сборщик мусора работает: какой механизм кэша это объясняет?
В обработчике бинарных данных разберите причину лишних копирований и выберите замену, уменьшающую пиковое потребление памяти при последовательной обработке срезов:
def consume(packet):
pass
def handle(data, ranges):
for start, end in ranges:
packet = data[start:end]
consume(packet)
payload = b"x" * 10_000_000
handle(payload, [(0, 1_000_000), (1_000_000, 2_000_000)])
В отчёте cProfile функция выглядит дорогой, хотя её собственное тело быстрое: какой показатель нужно проверить, чтобы отделить её время от времени вызванных функций?
В профиле tracemalloc текущее потребление вернулось почти к исходному, но пиковое осталось высоким: что это означает?
Что объясняет рост памяти после замены неизменяемых кортежей на списки?
При оценке памяти объекта через sys.getsizeof получилась неожиданно малая цифра: какой принцип измерения нужно проверить первым?
Что делает последовательную конкатенацию строк в цикле потенциально квадратичной по времени?
За счёт какого механизма добавление элементов в список Python обычно имеет амортизированную сложность O(1), хотя иногда сопровождается перераспределением памяти?
При создании тысяч однотипных объектов память неожиданно велика: как словари экземпляров могут разделять структуру ключей?
В каком случае поверхностная копия вложенной структуры почти не снижает её потребление памяти?
Каким образом слабая ссылка позволяет отслеживать объект, не продлевая его время жизни?
В обработчике после создания малого memoryview память большого исходного буфера не освобождается: какой механизм это объясняет?
На микробенчмарке первые вызовы Python-функции заметно медленнее последующих: какой механизм CPython нужно учитывать при интерпретации результата?
Сравните проверку принадлежности элемента в списке и множестве: за счёт какого механизма множество обычно выполняет её быстрее?
Показано 1–20 из 50