Java-сборщик мусора называется Generative Garbage Collector . Объекты в приложении живут в течение различных отрезков времени в зависимости от того, где они созданы и как они используются. Ключевым моментом здесь является то, что использование различных стратегий сбора мусора для недолговечных и долгоживущих объектов позволяет оптимизировать сборщик мусора специально для каждого случая.
Грубо говоря, поскольку объекты "выживают" в повторяющихся сборках мусора в Молодом поколении , они переносятся в Защищенное поколение . Permanent Generation - это особый случай, он содержит объекты, которые необходимы JVM, которые не обязательно представлены в вашей программе, например объекты, которые представляют классы и методы.
Поскольку Young Generation обычно содержит много мусора, оно оптимизировано для одновременного избавления от большого количества неиспользуемых объектов. Tenured Generation , поскольку он содержит объекты с более длительным сроком службы, оптимизирован для быстрой сборки мусора без больших затрат памяти.
С улучшениями в технологии сбора мусора детали стали довольно сложными и варьируются в зависимости от вашей JVM и от того, как она была настроена. Вы должны прочитать документацию для конкретной JVM, которую вы используете, если вам нужно точно знать, что происходит.
Тем не менее, существует простое историческое устройство, которое все еще полезно на концептуальном уровне. Исторически Young Generation было бы копировальным коллектором , а Tenured Generation было бы меткой и сборщиком развертки . копировальный коллектор практически не платит ЦП за избавление от мусора, большая часть затрат приходится на поддержку живых объектов, цена этой эффективности - более интенсивное использование памяти. метка и сборщик развертки оплачивает некоторую стоимость ЦП как для живых, так и для неиспользуемых объектов, но использует память более эффективно.