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

Выпуск получился достаточно хардкорным и крайне насыщенным. А еще мы разрушили миф о том, что ARC не имеет никакого отношения к GC.
Алексей Шипилёв
Java-разработчик, RedHat
Более 10 лет занимается вопросами производительности Java. В настоящий момент разрабатывает реализацию сборщика мусора в OpenJDK.
Стало интересно? Послушайте весь выпуск!
Содержание
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-8101https://twitter.com/virlof/status/1011303236395941890