Как долго длится долгое время выжившие в старом поколении? - PullRequest
0 голосов
/ 18 января 2019

Я знаю, что выжившие в долгосрочном периоде будут жить в старом поколении, когда возраст больше, чем MaxTenuringThreshold. Но в одной из прочитанных мной книг также говорится, что размер всех объектов того же возраста в пространстве выживших превышает половину пространство Выжившего. Так проблема в том, что это пространство Выжившего SO или S0 + S1? Почему не Eden + S0 или S1?

enter image description here

1 Ответ

0 голосов
/ 18 января 2019

Диаграмма немного неправильная - Перманентная генерация существует не в куче, а в пространстве без кучи: https://blogs.oracle.com/jonthecollector/presenting-the-permanent-generation

Чтобы ответить на ваш вопрос, молодое поколение состоит из:

  • Eden
  • S0 + S1 (все вместе известное как Пространство выживших).

Существует уровень «продвижения» объектов в куче, например: `

Eden -> S0 -> S1 -> Old Generation (или пребывание в должности).

Новые объекты Java создаются в Eden, который имеет фиксированный выделенный размер. Естественно, придет время, когда Иден заполнится, и начнется раунд второстепенных сборов. Все еще упоминаемые объекты будут продвинуты в пространство выживших. По мере того, как происходит каждый второстепенный GC, объекты меняются местами вокруг S0 и S1.

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

Прочитайте это: https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...