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

Сборка мусора (GC) — это процесс освобождения (или сбора ) неиспользуемой памяти из кучи. Этот процесс освобождения необходим, потому что по мере выполнения программы она динамически создает объекты в куче, что уменьшает количество свободного пространства, которое может быть выделено для вновь созданного объекта.

Мусор Коллекция в Java состоит из трех этапов:

1. Маркировка

На этом этапе идентифицируются те части памяти, которые используются, а какие нет. Объект, не имеющий ссылки на него, считается недоступным и поэтому помечается как неиспользуемый . Поскольку проверка всей памяти и ее маркировка занимает много времени, виртуальная машина Java (JVM) делает этот процесс более эффективным, разделяя кучу на три поколения:

  1. Молодой
  2. Старый (или имеющий постоянный срок)
  3. Постоянный

молодое поколение далее делится на три области:

  1. Eden
  2. Первый оставшийся в живых
  3. Вторая ячейка выжившего

2. Удаление

Изначально оставшиеся пространства пусты, и каждому новому объекту выделяется память в Eden. Когда Eden полностью заполнен, выполняется небольшая сборка мусора ; объекты, на которые нет ссылок, удаляются, а оставшиеся в живых копируются в первое пространство оставшихся в живых.

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

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

Эдем не полностью заполнен

1 из 8

3. Повышение

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

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

Оцените статью
nanomode.ru
Добавить комментарий