Как устроены память и Garbage Collector в CPython: разбор для Python backend interview

В Python памятью управляет не только Garbage Collector. На самом деле основа всего — reference counting , а GC лишь помогает собирать циклические ссылки. В этой статье разберём, как на самом деле устроено управление памятью в CPython : — что находится внутри PyObject — как работает ob_refcnt — почему одного reference counting недостаточно — как GC ищет циклический мусор — какие объекты вообще участвуют в сборке — и как всё это помогает искать memory leak в production Если ты готовишься к senior Python интервью или просто хочешь понимать, как Python работает под капотом , — добро пожаловать под капот CPython.

https://habr.com/ru/articles/1010390/

#python #cpython #garbage_collector #gc #memory_management #python_internals

Как устроены память и Garbage Collector в CPython: разбор для Python backend interview

На senior интервью по Python почти никогда не хватает ответа уровня «в Python есть reference counting и иногда запускается GC». Обычно хотят понять, знаешь ли ты механизм времени жизни объекта в...

Хабр

Сборка мусора в V8: Scavenger, Mark and Sweep и Tri-color Marking

В части 1 мы выяснили, что объекты в Heap не освобождаются сами по себе этим занимается Garbage Collector. Но как именно GC решает, что можно удалить? Если подумать, задача не такая очевидная: объект не нужен - понятие логическое, а GC работает с физическим графом ссылок. Ответ в том, что GC не пытается угадать намерения программы. Он задаёт более простой вопрос: можно ли добраться до этого объекта из работающего кода? Если нельзя объект недостижим, и никакой код уже не сможет его использовать. Значит, память можно вернуть. Алгоритм, реализующий эту логику, называется Mark and Sweep .

https://habr.com/ru/articles/1003728/

#v8 #javascript #память #garbage_collector #garbage_collector_javascript #nodejs #node #алгоритмы #программирование #memory

Сборка мусора в V8: Scavenger, Mark and Sweep и Tri-color Marking

В части 1 мы выяснили, что объекты в Heap не освобождаются сами по себе этим занимается Garbage Collector. Но как именно GC решает, что можно удалить? Если подумать, задача не такая очевидная, объект...

Хабр

Память в JavaScript: Stack и Heap

Последние пару лет изменили то, как пишется код. Copilot, Cursor, ChatGPT, Claude - все это генерирует вполне работающий JavaScript быстрее, чем успеваешь сформулировать задачу. Это удобно. Но у этого удобства есть обратная сторона, сгенерированный код работает правильно в смысле делает что просили , но не всегда правильно в смысле не течет по памяти и не роняет прод под нагрузкой . Модели хорошо знают синтаксис и паттерны. Они значительно хуже разбираются в том, что происходит под капотом конкретного движка. Closure, захватывающий лишние данные. Event listener, который никогда не снимается. Объект, который непреднамеренно продлевает жизнь половине DOM дерева. Все это - настоящие ошибки, которые реально встречаются в проде и ни один линтер их не поймает. Чтобы замечать такие вещи при ревью, нужно понимать, как именно V8 хранит объекты и когда решает их удалить. Это не академическое знание - это инструмент, который меняет то, на что смотришь в коде. Эта серия состоит из трех частей. Первая - про то, как V8 вообще организует память, что такое Stack и Heap, чем они отличаются и что такое pointer. Вторая - про сборщик мусора, как он определяет, что живо, а что нет и как делает это, не останавливая программу надолго. Третья - практическое применение, откуда берутся утечки памяти, как их искать и как писать код, который не создает лишней работы для GC. Смотреть под капот

https://habr.com/ru/articles/1003702/

#v8 #javascript #память #garbage_collector_javascript #stack #heap #pointer #garbage_collector #nodejs #node

Память в JavaScript: Stack и Heap

Последние пару лет изменили то, как пишется код. Copilot, Cursor, ChatGPT, Claude - все это генерирует вполне работающий JavaScript быстрее, чем успеваешь сформулировать задачу. Это удобно. Но у этого...

Хабр

Kürzlich habe ich einen Artikel gelesen, in dem es um Fragen in einem Vorstellungsgespräch als Java-Entwickler ging. Es wurden einige Fragen vorgestellt und die These aufgestellt, dass die meisten Bewerber diese Fragen nicht beantworten können. Aus diesem Grund möchte ich ...

https://magicmarcy.de/java-interview-fragen-1-java-grundlagen

#Java-Interview #Grundlagen #JDK #JRE #abstrakte_Klasse #Interface #final #finally #finalise #stack #heap #private #protected #super #Garbage_Collector #GC

Java Interview-Fragen: #1 Java Grundlagen | magicmarcy.de

Kürzlich habe ich einen Artikel gelesen, in dem es um Fragen in einem Vorstellungsgespräch als Java-Entwickler ging. Es wurden einige Fragen vorgestellt und die These aufgestellt, dass die meisten Bewerber diese Fragen nicht beantworten können. Aus diesem Grund möchte ich in dieser Serie auf diese Java Fragen im Vorstellungsgespräch eingehen und sie beantworten.

magicmarcy.de

Как Python управляет памятью под капотом

В Python разработчик редко задумывается об освобождении памяти. Объекты создаются, используются и будто бы исчезают сами. Это создает ощущение, что памятью «занимается Python», и на этом можно не фокусироваться. На практике понимание того, как именно работает сборка мусора, помогает писать более стабильный, предсказуемый и эффективный код.

https://habr.com/ru/articles/993856/

#python #память #подсчёт_ссылок #garbage_collector

Как Python управляет памятью под капотом

В Python разработчик редко задумывается об освобождении памяти. Объекты создаются, используются и будто бы исчезают сами. Это создает ощущение, что памятью «занимается Python», и на этом можно не...

Хабр

CPython — Сборка мусора изнутри, ч.4

Пришло время поговорить о главной функции сборщика мусора в CPython . В предыдущих частях ( 1 , 2 , 3 ) мы говорили о поколениях, инкрементальной и полной сборке мусора — но все они в итоге вызывают главную функцию, которая и реализует основной алгоритм циклического сборщика мусора — находит и разрывает циклы у объектов, которые уже вышли из использования. В первой статье на тему устройства сборщика мусора я написал, что история началась, когда я попробовал исправить ошибку в CPython . И вот, в четвёртой статье, я наконец‑то добрался до функции, в которой была ошибка. Если вам интересно, давайте посмотрим, как работает «сердце» сборщика мусора.

https://habr.com/ru/articles/992026/

#gc #garbage_collector #python #cpython #reference_counting

CPython — Сборка мусора изнутри, ч.4

Пришло время поговорить о главной функции сборщика мусора в CPython . В предыдущих частях ( 1 , 2 , 3 ) мы говорили о поколениях, инкрементальной и полной сборке мусора —...

Хабр

CPython — Сборка мусора изнутри, ч.3

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

https://habr.com/ru/articles/986784/

#gc #garbage_collector #python #cpython #reference_counting #incremental_gc

CPython — Сборка мусора изнутри, ч.3

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

Хабр

@magicmarcy
Ich hatte das letzte Mal vor 12 Jahren meine Finger zum Coden an der Tastatur.
Bei den ersten drei Fragen musste ich schmunzeln... und dann konnte ich nur noch eine einzige Frage beantworten... halbwegs.
Ich wusste bei allem noch was, aber hätte nicht mehr in die Details gehen können.

Hach, waren das Zeiten! 🥲

#Java #Grundlagen #JDK #JRE #abstrakte_Klasse #Interface #final #finally #finalise #stack #heap #private #protected #super #Garbage_Collector #GC

Kürzlich habe ich einen Artikel gelesen, in dem es um Fragen in einem Vorstellungsgespräch als Java-Entwickler ging. Es wurden einige Fragen vorgestellt und die These aufgestellt, dass die meisten Bewerber diese Fragen nicht beantworten können. Aus diesem Grund möchte ich ...

https://magicmarcy.de/java-interview-fragen-1-java-grundlagen

#Java-Interview #Grundlagen #JDK #JRE #abstrakte_Klasse #Interface #final #finally #finalise #stack #heap #private #protected #super #Garbage_Collector #GC

Java Interview-Fragen: #1 Java Grundlagen | magicmarcy.de

Kürzlich habe ich einen Artikel gelesen, in dem es um Fragen in einem Vorstellungsgespräch als Java-Entwickler ging. Es wurden einige Fragen vorgestellt und die These aufgestellt, dass die meisten Bewerber diese Fragen nicht beantworten können. Aus diesem Grund möchte ich in dieser Serie auf diese Java Fragen im Vorstellungsgespräch eingehen und sie beantworten.

magicmarcy.de

Kürzlich habe ich einen Artikel gelesen, in dem es um Fragen in einem Vorstellungsgespräch als Java-Entwickler ging. Es wurden einige Fragen vorgestellt und die These aufgestellt, dass die meisten Bewerber diese Fragen nicht beantworten können. Aus diesem Grund möchte ich ...

https://magicmarcy.de/java-interview-fragen-1-java-grundlagen

#Java-Interview #Grundlagen #JDK #JRE #abstrakte_Klasse #Interface #final #finally #finalise #stack #heap #private #protected #super #Garbage_Collector #GC

Java Interview-Fragen: #1 Java Grundlagen | magicmarcy.de

Kürzlich habe ich einen Artikel gelesen, in dem es um Fragen in einem Vorstellungsgespräch als Java-Entwickler ging. Es wurden einige Fragen vorgestellt und die These aufgestellt, dass die meisten Bewerber diese Fragen nicht beantworten können. Aus diesem Grund möchte ich in dieser Serie auf diese Java Fragen im Vorstellungsgespräch eingehen und sie beantworten.

magicmarcy.de