Дайджест: Garbage collection

Источник фото: https://www.flickr.com/photos/edenpictures/8149444474

Всё ближе 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 января тот же Шипилёв проиллюстрировал это в Твиттере:

  • 22 января на DZone появилась «шпаргалка» «Java GC Causes Distilled» со списком причин, инициирующих сборку мусора.
  • А 30 января на том же сайте внимание читателей привлёк материал «Java Garbage Collector and Reference Objects». Он сразу требует от читателя базового понимания GC, не разжёвывая основы — зато дальше использует доходчивую аналогию со школьной столовой, объясняя разницу между soft reference и weak reference на её примере.
  • Напоследок — о GC не в Java. В ноябрьском выпуске «Разбора полётов» Саша Гольдштейн пугал джавистов кодом дотнетовского GC: он размещён на GitHub, но там единый файл gc.cpp на десятки тысяч строк, попробуй разберись. А вот теперь вроде бы появился способ начать хоть что-то о нём понимать, не посвящая этому всю свою жизнь:

Tags from the story
, ,