Podlodka #74 — Управление памятью

Работа программиста немыслима без взаимодействия с памятью. Мы с легкостью создаем переменные и манипулируем ссылками на различные объекты в куче. И далеко не всегда задумываемся о том, какие задачи приходится решать разработчикам языков и рантаймов, чтобы выделение и освобождение памяти происходило быстро и эффективно. Поэтому мы позвали в гости Алексея Шипилёва из Red Hat, который уже более 10 лет занимается вопросами производительности Java. В настоящий момент Алексей разрабатывает реализацию сборщика мусора в OpenJDK, и с темой менеджмента памяти он знаком не понаслышке. Выпуск получился достаточно хардкорным и крайне насыщенным. А еще мы разрушили миф о том, что ARC не имеет никакого отношения к GC.

SoundCloud: https://bit.ly/2wfCHt3
iTunes: https://apple.co/2Mz6K9n

Поддержи лучший подкаст про мобильную разработку:
www.patreon.com/podlodka

Также ждем вас, ваши лайки, репосты и комменты в мессенджерах и соцсетях! 
Telegram-чат: https://t.me/podlodka
Telegram-канал: https://t.me/podlodkanews
Страница в Facebook: www.facebook.com/podlodkacast/
Twitter-аккаунт: https://twitter.com/PodlodkaPodcast

Тайминги:
00:00:38 — Знакомство с гостем
00:02:19 — Что такое память в программировании
00:06:28 — Про computer science
00:07:17 — Управление сложностью процессов
00:09:54 — Высокоуровневые языки программирования
00:13:44 — Про ассемблер и пузырьковую сортировку
00:16:49 — Ручной менеджмент памяти
00:25:36 — Слабая гипотеза о поколениях
00:29:26 — Автоматический менеджмент памяти
00:32:09 — Reference counting
00:39:37 — Reference counting и циклические ссылки
00:48:00 — Трассирующие сборщики мусора
01:00:46 — Concurrent-коллекторы
01:06:26 — Как создатели языков выбирают менеджер памяти?
01:11:17 — Как выбрать GC
01:17:45 — Как правильно программировать, зная свой GC
01:22:32 — LRU-кэш и GC
01:27:59 — Про производительность и бизнес-логику
01:33:05 — Будни разработчика GC
01:41:35 — Как стать разработчиком GC
01:47:44 — Подведение черты
01:48:41 — Вопрос почти Стасу

Полезные ссылки:
1. Talks:
https://shipilev.net/#shenandoah

2. The Garbage Collection Handbook:
http://gchandbook.org/

3. Shenandoah GC:
https://wiki.openjdk.java.net/display/shenandoah/Main

4. ZGC:
http://openjdk.java.net/jeps/333

5. Epsilon GC:
http://openjdk.java.net/jeps/318

6. “JVM Anatomy Park: TLAB Allocation”:
https://shipilev.net/jvm-anatomy-park/4-tlab-allocation/

7. “JVM Anatomy Park: GC Design And Pauses”
https://shipilev.net/jvm-anatomy-park/3-gc-design-and-pauses/

8. “JVM Anatomy Park: Moving GC And Locality”
https://shipilev.net/jvm-anatomy-park/11-moving-gc-locality/

9. “Логика неизбежности”:
https://lex-kravetski.livejournal.com/301063.html

10. “Dismissing Python Garbage Collection”
https://instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172

11. Swift: “App crash with memory corruption on property set” https://bugs.swift.org/browse/SR-8101 https://twitter.com/virlof/status/1011303236395941890