Сборка мусора в JVM — всё, что нужно знать
1. Сборка мусора (GC) → Автоматическая очистка памяти
🔸JVM автоматически освобождает память от недостижимых объектов.
🔸Используется для избегания ручного управления памятью (например, неиспользуемые объекты List очищаются автоматически).
2. Heap → Основная область памяти для объектов
🔸Здесь хранятся все объекты Java.
🔸Делится на области: Young, Old и иногда Metaspace.
3. Молодое поколение (Young Generation) → Новые объекты (краткоживущие)
🔸Большинство новых объектов создаются здесь.
🔸Пример использования: String s = "abc" сначала попадает в эту область.
4. Старое поколение (Old Generation / Tenured) → Долгоживущие объекты
🔸Объекты, пережившие несколько сборок мусора, перемещаются сюда.
🔸Пример использования: кэшированные конфигурации, бины, живущие на протяжении всей жизни приложения.
5. Metaspace → Хранение метаданных классов (начиная с Java 8+)
🔸Заменяет PermGen.
🔸Хранит структуру классов, информацию о методах (например, User.class, List.class).
6. Minor GC → Очистка молодого поколения
🔸Быстрая и частая.
🔸Срабатывает, когда заполняется пространство Eden (например, при множестве краткоживущих запросов).
7. Major (Full) GC → Очистка старого поколения и Metaspace
🔸Медленнее и реже.
🔸Срабатывает, когда почти заполнено старое поколение (например, при больших графах объектов или утечках памяти).
8. Stop-the-World (STW) → Приостановка приложения во время GC
🔸JVM замораживает все потоки на время GC.
🔸Может вызывать задержки (например, при большой полной сборке мусора).
9. GC Roots → Точки отсчета для достижимости объектов
🔸Включает ссылки из регистров, стэков потоков, загрузчиков классов.
🔸GC отслеживает от них «живые» объекты (например, локальные переменные в методе main()).
Основные типы сборщиков мусора
10. Serial GC → Однопоточный сборщик
🔸Простой, но останавливает всё приложение.
🔸Используется для малых heaps (например, CLI-инструменты или тестовые приложения).
11. Parallel GC → Многопоточный сборщик
🔸Ускоряет GC за счёт многопоточности.
🔸Используется в приложениях с приоритетом на производительность (например, batch-задачи, нагруженные серверы).
12. CMS (Concurrent Mark Sweep) → Сборщик с низкими паузами (УСТАРЕЛ)
🔸Работает в фоновом режиме с короткими паузами.
🔸Использовался в приложениях, чувствительных к задержкам (например, веб-серверы).
13. G1 GC → Сбалансированный сборщик с низкими паузами (по умолчанию с Java 9+)
🔸Делит heap на регионы; работает параллельно и конкурентно.
🔸Отличный универсальный сборщик (например, для микросервисов, real-time API).
14. ZGC → Сборщик с ультранизкими паузами
🔸Разработан для пауз в пределах миллисекунды.
🔸Используется в системах реального времени с большим heap (например, финтех, игры).
15. Shenandoah → Сборщик с низкими паузами (RedHat/OpenJDK)
🔸Конкурирует с ZGC.
🔸Применяется в больших heaps с постоянными требованиями к задержкам.
👉 Java Portal
Post #1557
2.24K
- 👍 7
- ❤ 6