[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jvm-chto-takoe-zgc-i-shenandoah":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},1215,"chto-takoe-zgc-i-shenandoah",38,"jvm","JVM","⚙️","Что такое ZGC и Shenandoah","ZGC и Shenandoah — это сборщики мусора нового поколения, обеспечивающие сверхнизкие паузы (менее 1 мс) на heap любого размера за счёт конкурентного уплотнения памяти.\n\n### ZGC (Z Garbage Collector)\n\nZGC разработан Oracle, доступен с Java 11 (экспериментально), production-ready с Java 15 (JEP 377).\n\nКлючевые характеристики:\n- Паузы \u003C 1 мс, не зависят от размера heap\n- Поддержка heap до 16 TB\n- Concurrent compaction — уплотнение памяти без остановки приложения\n- Colored pointers — метаданные хранятся в неиспользуемых битах 64-битного указателя\n- Load barriers — специальный код, выполняемый при чтении ссылки на объект\n\n```\n 63    42 41      0\n+--------+---------+\n|metadata | address |\n+--------+---------+\n  Marked0, Marked1, Remapped, Finalizable — служебные биты\n```\n\nGenerational ZGC (Java 21+, JEP 439) — версия ZGC с поддержкой поколений. Молодые объекты собираются чаще и быстрее:\n\n```bash\n# Java 21-22: явное включение Generational ZGC\n-XX:+UseZGC -XX:+ZGenerational\n\n# Java 23+: Generational ZGC по умолчанию при -XX:+UseZGC\n-XX:+UseZGC\n```\n\n### Shenandoah\n\nShenandoah разработан Red Hat, доступен в OpenJDK с Java 12 (экспериментально), production-ready с Java 15.\n\nКлючевые характеристики:\n- Паузы \u003C 1 мс, не зависят от размера heap\n- Concurrent compaction\n- Brooks pointers (forwarding pointers) — дополнительный указатель в заголовке каждого объекта\n- Не требует цветных указателей\n\n### Сравнение ZGC и Shenandoah\n\n| Характеристика | ZGC | Shenandoah |\n|---|---|---|\n| Разработчик | Oracle | Red Hat |\n| Механизм forwarding | Colored pointers | Brooks pointers |\n| Барьеры | Load barriers | Load + store barriers |\n| Overhead на объект | Нет (информация в указателе) | +1 слово в заголовке |\n| Максимальный heap | 16 TB | Ограничен ОС |\n| Generational | Да (с Java 21) | В разработке |\n| Доступность | Oracle JDK + OpenJDK | Только OpenJDK (не в Oracle JDK) |\n\n### Типичные сценарии\n\n- Финансовые системы (trading, payments)\n- Игровые серверы\n- Real-time аналитика\n- Микросервисы с жёсткими SLA\n- Приложения с heap > 8 GB\n\n### Частые ошибки\n\n- Использование ZGC\u002FShenandoah для batch-обработки, где важна пропускная способность — Parallel GC будет эффективнее\n- Недостаточное количество CPU-ядер — concurrent GC потоки конкурируют с потоками приложения\n- Использование Shenandoah на Oracle JDK — он там не доступен\n- Слишком маленький heap (\u003C 256 MB) — overhead превышает выигрыш\n\n> **На собеседовании:** объясните, зачем нужны ZGC\u002FShenandoah (паузы \u003C 1 мс вне зависимости от heap), назовите ключевое отличие (colored pointers vs Brooks pointers) и упомяните компромисс — больше CPU в обмен на меньшую латентность. Не забудьте про Generational ZGC с Java 21. Частая ловушка — вопрос, где Shenandoah не доступен (ответ: в Oracle JDK).","","senior",[7,15,16,17],"memory","performance","gc",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"Что такое ZGC и Shenandoah — Gymterview","ZGC и Shenandoah: сборщики мусора с паузами менее 1 мс. Colored pointers vs Brooks pointers, Generational ZGC, сравнение и сценарии использования.","ZGC и Shenandoah: low-latency GC в JVM — Gymterview","Сравнение ZGC и Shenandoah: colored pointers vs Brooks pointers, паузы \u003C1 мс, Generational ZGC с Java 21.",[26,27,28,29,30,31,32,8,33],"ZGC","Shenandoah","colored pointers","Brooks pointers","Generational ZGC","low-latency","concurrent compaction","собеседование","ZGC (Oracle) и Shenandoah (Red Hat) — GC нового поколения с паузами \u003C1 мс на heap любого размера. ZGC использует colored pointers и load barriers, поддерживает heap до 16 TB. Shenandoah использует Brooks pointers и load+store barriers. Generational ZGC (Java 21+) добавил поколения для снижения overhead. Shenandoah доступен только в OpenJDK. Оба production-ready с Java 15.",true]