Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: Java, Garbage Collection, Minor GC, Major GC, Heap, JVM

Что такое Minor и Major GC?

Вопрос проверяет понимание механизмов сборки мусора в Java, в частности различий между Minor и Major GC, что важно для оптимизации производительности приложений.

Короткий ответ

Minor GC (или Young GC) очищает область памяти Young Generation, где создаются новые объекты. Он работает быстро, так как проверяет только небольшую часть кучи. Major GC (или Full GC) очищает всю кучу, включая Young и Old Generation, что занимает значительно больше времени и может вызывать заметные паузы в работе приложения. Понимание разницы помогает настраивать сборщик мусора для минимизации задержек.

Длинный ответ

В Java управление памятью автоматизировано с помощью механизма сборки мусора (Garbage Collection, GC). Куча (Heap) разделена на области, главные из которых — Young Generation и Old Generation. Разные типы сборки мусора работают с этими областями по-разному.

Minor GC (Young GC)

Minor GC происходит, когда заполняется область Young Generation, которая состоит из Eden и двух Survivor пространств (S0 и S1). Большинство объектов изначально создаются в Eden.

  • Процесс: При запуске Minor GC живые объекты из Eden и одного из Survivor пространств копируются в другое Survivor пространство. Объекты, пережившие несколько таких циклов (обычно 15), перемещаются в Old Generation.
  • Характеристики: Выполняется быстро, так как проверяет только небольшую часть кучи. Частота высокая.

Major GC (Full GC)

Major GC, часто называемый Full GC, происходит, когда необходимо очистить всю кучу, включая Old Generation. Это может быть вызвано нехваткой места в Old Generation после Minor GC или явным вызовом System.gc().

  • Процесс: Останавливает все потоки приложения (Stop-the-World) и проверяет все объекты в куче на достижимость. Мёртвые объекты удаляются, живые могут быть перемещены для дефрагментации.
  • Характеристики: Занимает значительно больше времени, чем Minor GC, что приводит к заметным паузам в работе приложения. Частота должна быть минимальной.

Пример и настройка

Разные сборщики мусора (например, G1, Parallel, ZGC) по-разному реализуют эти процессы. Вот пример кода, который может спровоцировать разные типы GC:

import java.util.ArrayList;
import java.util.List;

public class GCDemo {
    public static void main(String[] args) {
        List youngList = new ArrayList<>();
        // Создание множества объектов для Eden, может вызвать Minor GC
        for (int i = 0; i < 100000; i++) {
            youngList.add(new String("Object" + i));
        }
        // Принудительная рекомендация к Full GC (не гарантирует вызов)
        System.gc();
    }
}

Настройка GC часто делается через JVM-флаги, например, -XX:+UseG1GC для включения сборщика G1, который старается минимизировать паузы от Full GC.

Вывод: Понимание разницы между Minor и Major GC критично для разработки высоконагруженных приложений на Java. Minor GC — быстрая и частая операция для очистки молодых объектов, в то время как Major GC — дорогая операция, которую нужно минимизировать через правильный выбор и настройку сборщика мусора.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#Java

#Garbage Collection

#Minor GC

#Major GC

#Heap

#JVM

Подпишись на Java Developer в телеграм