Пристальный взгляд на модель памяти JVM

Модель памяти Java также описывает, как система сборки мусора Java управляет памятью (и очищает неиспользуемую память), чтобы программа Java могла работать эффективно и надежно.

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

Модель памяти Java состоит из нескольких различных типов памяти:

  1. Куча
    Это основная память, которую могут использовать Java-программы.
  2. Стек
    Это временная память, которая используется программами Java для хранения переменных и значений, относящихся к определенному методу или функции.

Куча памяти состоит из двух частей:

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

Молодое поколение состоит из трех частей:

  1. Память Эдема
    Пространство Эдема — это основная область, где хранятся недавно созданные объекты Java.
  2. Выживший 1(s1) Память
  3. Выживший 2(s2) Память

Survivor Memory используется для хранения объектов, переживших несколько сборок мусора.

Поколенческая сборка мусора

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

Сборка мусора состоит из двух частей:

  1. Незначительная сборка мусора
    Когда пространство Eden заполняется, запускается незначительная сборка мусора. Ссылочные объекты перемещаются в память Survivor (либо s1, либо s2). Объекты без ссылок удаляются.
  2. Основной сборщик мусора
    Это процесс очистки неиспользуемой или ненужной памяти (мусора) в старом поколении.

Сборка мусора Java

Сборка мусора — это процесс проверки памяти кучи, определения того, какие объекты используются, а какие нет, и удаления неиспользуемых объектов. Самый очевидный способ сделать объект пригодным для сборки мусора — если все его ссылки имеют значение null.

Любые новые объекты сначала назначаются памяти Эдема. Оба воспоминания выживших начинаются пустыми. Когда Eden Memory заполнена, происходит Minor GC.

Во время следующего Minor GC то же самое происходит с Eden Memory, и объекты, на которые есть ссылки, перемещаются в Survivor Memory. В этой итерации он перемещается в память s2.

Кроме того, возраст объектов в памяти s1 из последнего дополнительного GC увеличивается, и они перемещаются в память s2. Память s1 и Eden очищается, как только все уцелевшие объекты перемещаются в s2. s2 в настоящее время содержит объекты разного возраста.

Та же процедура применяется при следующем второстепенном GC. Однако на этот раз память выжившего перевернута. Оба объекта, на которые ссылается Eden и s2memories, перемещаются в s1 Memory. Возраст выживших объектов также увеличился. Воспоминания Иден и s2 очищены.

Возраст каждого объекта проверяется после каждого цикла Minor GC. Как только объекты достигают определенного произвольного возраста, они становятся доступными и переходят из молодого поколения в старое поколение. Наконец, происходит Основной GC.

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