Вопрос

Меня путают с поколением Heap,Young,Tentured и Permanent.

Кто-нибудь может, пожалуйста, объяснить?

Это было полезно?

Решение

Сборщик мусора Java называется Сборщик мусора поколений.Объекты в приложении живут разное время в зависимости от того, где они созданы и как используются.Ключевым моментом здесь является то, что использование различных стратегий сборки мусора для короткоживущих и долгоживущих объектов позволяет оптимизировать сборщик мусора специально для каждого случая.

Грубо говоря, поскольку объекты «выживают» при повторяющихся сборках мусора в Молодое поколение они мигрируют в Штатное поколениеПостоянное поколение это особый случай, он содержит объекты, необходимые JVM, которые не обязательно представлены в вашей программе, например объекты, представляющие классы и методы.

Поскольку Молодое поколение обычно содержит много мусора, он оптимизирован для одновременного избавления от большого количества неиспользуемых объектов.А Штатное поколение поскольку он содержит долгоживущие объекты, оптимизирован для быстрой сборки мусора без траты большого количества памяти.

С усовершенствованием технологии сбора мусора детали стали довольно сложными и различаются в зависимости от вашей JVM и того, как она настроена.Вам следует прочитать документация для конкретной JVM, которую вы используете, если вам нужно точно знать, что происходит.

Тем не менее, существует простая историческая договоренность, которая все еще полезна на концептуальном уровне.Исторически Молодое поколение было бы коллекционер копий и Штатное поколение быть сборщик меток и подметанияколлекционер копий практически не платит затрат ЦП на избавление от мусора, большая часть затрат приходится на поддержание живых объектов, цена этой эффективности — более интенсивное использование памяти.А сборщик меток и подметания платит некоторую стоимость ЦП как за живые, так и за неиспользуемые объекты, но использует память более эффективно.

Другие советы

Куча памяти Java является частью памяти, выделенной JVM операционной системой.Всякий раз, когда мы создаем объекты, они создаются внутри куча в java.

Пространство кучи Java разделяется на три региона или поколения для сбора мусора, называемых Молодое поколение, Пожилое или работающее по найму Поколение и Постоянное поколение.Постоянная генерация - это сбор мусора во время полной сборки в hotspot JVM

Тот Самый Молодое поколение это место, где выделяются и устаревают все новые объекты.Когда молодое поколение заполняется, это приводит к незначительной уборке мусора.Молодое поколение, полное мертвых предметов, собирается очень быстро.Некоторые сохранившиеся предметы стареют и со временем переходят к старому поколению.

Тот Самый Старое Поколение используется для хранения давно сохранившихся предметов.Как правило, пороговое значение устанавливается для объекта молодого поколения, и когда этот возраст достигнут, объект перемещается в старое поколение.В конце концов, старое поколение должно быть собрано.Это событие называется крупной сбором мусора.

Тот Самый Постоянное поколение содержит метаданные, необходимые JVM для описания классов и методов, используемых в приложении.Постоянная генерация заполняется JVM во время выполнения на основе классов, используемых приложением.

Постоянный был заменен на Метапространство с момента выпуска Java 8. Постоянный размер и максимальный размер теперь параметры будут игнорироваться.Взгляните на это статья dzone Автор: Пьер - Хьюг Шарбонно, чтобы понять, что такое Метапространство.

enter image description here

Источник изображения:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

Обратитесь к той же статье для получения более подробной информации.

Все объекты в куче сохраняются, когда на них ссылаются.Когда их не станет больше, сборщик мусора (GC) освободит их память.

PermGen, Young и Tenured — это разные классификации объектов (или пространств в куче, где они могут находиться).

ПермГен: эти объекты всегда будут там, они не подлежат сборке мусора.Есть объекты классов, интернированные строки и т.д.Я не знаю, есть ли там GC (когда система выгружает классы...но это не нормально)

Молодой: когда объект создается, он находится здесь.

Штатный: объект переходит в эту классификацию/категорию, когда он выдерживает N проходов GC (выживание = GC проходит, но на этот объект есть ссылка, поэтому его нельзя вернуть).

В зависимости от используемого GC и некоторой параметризации GC проходит более или менее часто.

Тогда сборщик мусора может иметь разные подходы к управлению объектами в куче.Такая классификация объектов помогает это сделать.

Вот еще одна отличная (хотя и длинная) статья о том, как настроить/изменить параметры ГХ, которая может помочь вам понять еще больше:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/

Очень полезное чтение, если у вас возникли проблемы со сборщиком мусора и вам нужно знать, как читать журналы сборщика мусора, или вам нужно понять, как работает ваш текущий сборщик мусора.

Если вы хотите подключить удаленный мониторинг работающей системы, чтобы видеть использование памяти в реальном времени и запуски GC, воспользуйтесь этим инструментом:

http://java.sun.com/ Performance/jvmstat/visualgc.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top