[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jvm-pokoleniya-obektov-young-generation-old-generation":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":17,"progress":18,"seo":19},1216,"pokoleniya-obektov-young-generation-old-generation",38,"jvm","JVM","⚙️","Поколения объектов: Young Generation, Old Generation","Поколения (generations) — это способ разделения heap в JVM на области для объектов разного возраста, основанный на гипотезе о поколениях: большинство объектов умирают молодыми. Это позволяет оптимизировать сборку мусора, собирая короткоживущие объекты часто и дёшево.\n\n> Аналогия из жизни: представьте входную корзину для почты (Eden). Новые письма попадают туда. Раз в неделю вы разбираете корзину: ненужное выбрасываете (GC), важное перекладываете в папку (Survivor). Если письмо остаётся важным после нескольких разборов, оно уходит в архив (Old Generation), который разбирают гораздо реже.\n\n### Структура heap\n\n```\n+-----------------------------------------------+\n|                   Heap (-Xmx)                  |\n+-------------------+---------------------------+\n|  Young Generation |     Old Generation        |\n|    (-Xmn)         |    (Tenured)              |\n+-----+------+------+---------------------------+\n| Eden|  S0  |  S1  |          Old               |\n+-----+------+------+---------------------------+\n```\n\n- Eden Space — область создания новых объектов. Большинство объектов здесь и умирают\n- Survivor Space S0 и S1 — две области, между которыми копируются выжившие объекты. В любой момент одна из них пуста\n- Old Generation (Tenured) — содержит объекты, пережившие несколько циклов Minor GC\n\n### Жизненный цикл объекта\n\n1. Объект создаётся в Eden\n2. Когда Eden заполняется, происходит Minor GC (Young GC)\n3. Живые объекты из Eden копируются в один из Survivor (например, S0)\n4. При следующем Minor GC живые объекты из Eden и S0 копируются в S1 (и наоборот)\n5. Объект, переживший определённое количество Minor GC (по умолчанию 15, задаётся `-XX:MaxTenuringThreshold`), продвигается (promote) в Old Generation\n\n### Типы сборок мусора\n\n| Тип | Что собирает | Когда происходит |\n|---|---|---|\n| Minor GC (Young GC) | Только Young Generation | Eden заполнен |\n| Major GC | Только Old Generation | Old Generation заполнен (зависит от GC) |\n| Full GC | Весь heap + Metaspace | Нехватка памяти, `System.gc()`, нет места для promotion |\n\nТермин Major GC иногда используется как синоним Full GC, но строго говоря Major GC собирает только Old Generation, а Full GC — весь heap.\n\n\u003Cdetails>\n\u003Csummary>Основные параметры поколений\u003C\u002Fsummary>\n\n```bash\n# Размер Young Generation\n-Xmn512m\n\n# Соотношение Old\u002FYoung (по умолчанию 2, т.е. Young = 1\u002F3 heap)\n-XX:NewRatio=2\n\n# Соотношение Eden\u002FSurvivor (по умолчанию 8, т.е. S0 = S1 = 1\u002F10 Young)\n-XX:SurvivorRatio=8\n\n# Максимальный возраст для продвижения (по умолчанию 15)\n-XX:MaxTenuringThreshold=15\n\n# Включить вывод распределения возрастов\n-XX:+PrintTenuringDistribution\n```\n\n\u003C\u002Fdetails>\n\n### Premature Promotion\n\nЕсли Survivor Space слишком мал, объекты будут продвигаться в Old Generation раньше времени, увеличивая частоту Major\u002FFull GC и снижая производительность.\n\n### Частые ошибки\n\n- Ручное задание `-Xmn` при использовании G1 — отключает адаптивный подбор размеров\n- Установка `MaxTenuringThreshold=0` — все объекты сразу попадают в Old Gen\n- Вызов `System.gc()` в коде — провоцирует Full GC и может вызвать длительную паузу\n- Слишком маленький Survivor Space — вызывает premature promotion\n\n> **На собеседовании:** объясните гипотезу о поколениях (большинство объектов умирают молодыми), опишите путь объекта: Eden -> Survivor -> Old. Назовите три типа GC (Minor, Major, Full) и когда они происходят. Частая ловушка — вопрос о разнице между Major и Full GC.","","middle",[7,15,16],"memory","gc",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":34,"featuredSnippetReady":35},"Поколения объектов: Young Generation, Old Generation — Gymterview","Поколения объектов в JVM: Eden, Survivor, Old Generation. Жизненный цикл объекта, типы GC (Minor, Major, Full), premature promotion и настройка параметров.","Поколения объектов в JVM: Young и Old Generation — Gymterview","Как объекты проходят путь Eden -> Survivor -> Old. Типы GC: Minor, Major, Full. Гипотеза о поколениях и premature promotion.",[25,26,27,28,29,30,31,32,8,33],"Young Generation","Old Generation","Eden","Survivor","Minor GC","Full GC","поколения","MaxTenuringThreshold","собеседование","JVM разделяет heap на поколения по гипотезе: большинство объектов умирают молодыми. Young Generation: Eden (новые объекты), Survivor S0\u002FS1 (выжившие). Old Generation: объекты, пережившие 15 циклов Minor GC (MaxTenuringThreshold). Minor GC собирает только Young (быстрая), Major GC — Old, Full GC — весь heap + Metaspace (самая дорогая). Premature promotion снижает производительность.",true]