Молодое, жилое и пермское поколение

Я путаюсь с кучей, молодым, теневым и пермским поколением.

Может ли кто-нибудь объяснить это?

Ответ 1

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

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

Так как Young Generation, как правило, содержит много мусора, он оптимизирован для избавления от множества неиспользуемых объектов одновременно. Теневое поколение, поскольку оно содержит более долговечные объекты, оптимизировано для быстрой сборки мусора, не тратя много памяти.

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

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

Ответ 2

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

Явное пространство Java разделено на три области или поколение для сбора мусора под названием Young Generation, Old или tenured Generation и Permanent Generation. Постоянное поколение - мусор, собранный во время полного gc в Hotspot JVM

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

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

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

PermGen был заменен на Metaspace с момента выпуска Java 8. Параметры PermSize и MaxPermSize будут игнорироваться. Посмотрите эту статью статью о дзоне Пьера - Хьюга Шарбоно, чтобы понять о Метаспасе.

введите описание изображения здесь

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

Более подробную информацию см. в той же статье.

Ответ 3

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

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

PermGen: эти объекты будут всегда там, они не собираются с мусором. Объекты классов есть, интернированные строки и т.д. Я не знаю, есть ли там GC (когда система UNloads классов... но это не нормальная вещь)

Young:, когда объект создается здесь.

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

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

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

Ответ 4

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

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

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

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

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