Работа программиста немыслима без взаимодействия с памятью. Мы с легкостью создаем переменные и манипулируем ссылками на различные объекты в куче. И далеко не всегда задумываемся о том, какие задачи приходится решать разработчикам языков и рантаймов, чтобы выделение и освобождение памяти происходило быстро и эффективно. Чтобы разобраться в теме, мы позвали в гости Алексея Шипилёва из Red Hat, который уже более 10 лет занимается вопросами производительности Java. В настоящее время Алексей разрабатывает реализацию сборщика мусора в OpenJDK, и с темой менеджмента памяти он знаком не понаслышке. Выпуск получился достаточно хардкорным и крайне насыщенным. А еще мы разрушили миф о том, что ARC не имеет никакого отношения к GC. Поддержи лучший подкаст про мобильную разработку: 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 - Вопрос почти Стасу Полезные ссылки: - Talks: https://shipilev.net/#shenandoah - The Garbage Collection Handbook: http://gchandbook.org/ - Shenandoah GC: https://wiki.openjdk.java.net/display/shenandoah/Main - ZGC: http://openjdk.java.net/jeps/333 - Epsilon GC: http://openjdk.java.net/jeps/318 - “JVM Anatomy Park: TLAB Allocation”: https://shipilev.net/jvm-anatomy-park/4-tlab-allocation/ - “JVM Anatomy Park: GC Design And Pauses” https://shipilev.net/jvm-anatomy-park/3-gc-design-and-pauses/ - “JVM Anatomy Park: Moving GC And Locality” https://shipilev.net/jvm-anatomy-park/11-moving-gc-locality/ - “Логика неизбежности”: https://lex-kravetski.livejournal.com/301063.html - “Dismissing Python Garbage Collection” https://instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172 - Swift: “App crash with memory corruption on property set” https://bugs.swift.org/browse/SR-8101 https://twitter.com/virlof/status/1011303236395941890