Всё ближе Java 9, в которой сборщиком мусора по умолчанию станет G1, а другой молодой сборщик Shenandoah тем временем становится всё заметнее — самое время обратить внимание на тему GC. За январь по ней появился целый ряд материалов, и теперь, когда месяц позади, мы собрали ссылки вместе:
- 3 января на Хабре появился перевод «Современный подход к сборке мусора». Текст в первую очередь о Go, но его теоретическая часть о трейд-оффах GC и гипотезе поколений не привязана к конкретному языку, так что будет полезна Java-разработчикам, не интересовавшимся темой раньше. (Если хочется больше вводной информации на русском, можно вспомнить серию хабрапостов «Дюк, вынеси мусор»).
- 5 января на DZone опубликовали текст «How to Reduce Long GC Pauses» с советами по сокращению пауз на сборку мусора («создавайте поменьше крупных объектов», «проверьте, не тесно ли младшему поколению», «подкрутите количество GC-потоков» и так далее).
- 6 января ссылка на «How to Reduce Long GC Pauses» попала на Reddit. В комментариях написали «а Shenandoah кто-нибудь уже пробовал?» (логичный вопрос: у этого сборщика даже официальное описание начинается со слов «ultra-low pause time»). Топикстартер ответил «по странице проекта не вижу способа его скачать/попробовать».
Алексей Шипилёв, будучи коммитером Shenandoah, пятничным вечером зашёл на Reddit развеяться и увидел этот тред. В результате пятничным вечером, когда все развеиваются как-то иначе, Шипилёв подробно разъяснял в комментариях, как опробовать Shenandoah. Позже на основе его объясне…
- Чтобы вы как следует прочувствовали тему сборки мусора, в самом этом дайджесте есть своя stop-the-world пауза, приостанавливающая всё остальное. Это музыкальная пауза:
- …ний была обновлена вики-страница проекта.
- Благодаря чему именно Shenandoah добивается «ultra-low pause time»? Его ключевой особенностью является concurrent compaction: с Shenandoah работа приложения продолжается и тогда, когда другие сборщики «останавливают мир». И 13 января тот же Шипилёв проиллюстрировал это в Твиттере:
If I had to show Shenandoah GC in one tweet. All this sweat, tears and blood to make (inevitable) copying without stopping the world. pic.twitter.com/ocNw3sSDDq
— Aleksey Shipilëv (@shipilev) January 13, 2017
- 22 января на DZone появилась «шпаргалка» «Java GC Causes Distilled» со списком причин, инициирующих сборку мусора.
- А 30 января на том же сайте внимание читателей привлёк материал «Java Garbage Collector and Reference Objects». Он сразу требует от читателя базового понимания GC, не разжёвывая основы — зато дальше использует доходчивую аналогию со школьной столовой, объясняя разницу между soft reference и weak reference на её примере.
- Напоследок — о GC не в Java. В ноябрьском выпуске «Разбора полётов» Саша Гольдштейн пугал джавистов кодом дотнетовского GC: он размещён на GitHub, но там единый файл gc.cpp на десятки тысяч строк, попробуй разберись. А вот теперь вроде бы появился способ начать хоть что-то о нём понимать, не посвящая этому всю свою жизнь:
If you're looking for a way to understand the .NET GC code (~36K LOC) then this GitHub post is a good place to start https://t.co/aLXro28T5T pic.twitter.com/abbYbSGS6m
— Matt Warren (@matthewwarren) January 24, 2017