Что такое Java сборщик мусора? - Руководство по Java сборщик мусора

Содержание:

Anonim

Что такое Java сборщик мусора?

Сборщик мусора является потоком демона, который освобождает память во время выполнения. Сборка мусора также может быть выражена как переработка памяти. Главным образом в JVM, сборщик мусора точки доступа оракула используется из-за его эффективности. Область памяти в JVM, где создаются объекты, называется кучей. Куча делится на две части:

  1. Пространство молодого поколения
  2. Старое / заемное поколение

Молодое поколение снова делится на 3 части

  1. Райское пространство
  2. Оставшийся в живых От
  3. Оставшийся в живых К

Более глубокое объяснение было дано в следующих пунктах. Например, если вы создали кеш в своей программе и если объект кеша пережил много циклов ГХ, он переходит в старое поколение. GC ищет объекты, которые больше не нужны программе, и уничтожает их.

Почему сборщик мусора?

До Java два самых популярных языка были C и C ++. В C мы столкнулись с calloc (), malloc (), realloc (), которые будут выделять буферную память, а в C ++ у нас есть деструкторы. Все эти функции предназначены для функции, называемой управлением памятью. Java обеспечивает сборщик мусора в качестве автоматического управления памятью по двум основным причинам:

  • Некоторые созданные объекты становятся недоступными
  • Ссылки от старых объектов к молодым объектам существуют только в небольших количествах.

Лучше всего использовать сборщик мусора для установки флагов на JVM.

Позвольте привести пример с недоступными объектами.

//class code
int i = 1;
if(i == 1)(
String s = abc;
System.out.println(s);
)
//class code

В приведенном выше примере Java создаст строковый объект, и область действия этого объекта как раз в том случае, если блок нельзя использовать снаружи. Таким образом, когда сборщик мусора запускается над этим классом, он помечает 's' как недоступный и неиспользуемый объект и удаляет его.

Функции в сборщике мусора

  • Пометка: запускается из корневого узла вашего приложения (основного), просматривает граф объектов, помечает объекты, которые доступны как жизнь.
  • Удалить / развернуть: Удалить недоступные объекты. Когда GC удаляет объекты, он создает дыру в куче, делая ее несовместимой. Таким образом, уплотнение используется.
  • Сжатие: сжатие памяти, перемещаясь вокруг объектов и отмечая выделение смежно, чем фрагментировано. Это трудоемкая задача.

Как работает Java Garbage Collector?

  • Есть два типа объектов:

Живые объекты: доступны (ссылки с другого объекта)

Мертвые объекты: недоступны (нигде не указаны)

  • Все вновь созданные объекты создаются в пространстве Eden (пространстве молодого поколения).
  • Как только пространство Eden заполнено, программа minorGC () запускается в пространстве Young Generation, которое отмечает все неиспользуемые или мертвые объекты и удаляет их из памяти.
  • Объекты, которые пережили этот цикл GC, будут перемещены в Survivor From space. Тот же процесс повторяется, и на этот раз, когда объекты перемещаются из пространства Eden в Survivor. Из космоса GC проверяет, заполнен ли он, освобождены ли мертвые объекты и выжившие объекты также будут перемещены в Survivor.
  • Этот процесс повторяется, и если некоторые объекты пережили порог отсутствия циклов GC, эти объекты перемещаются в пространство Старого поколения.
  • В этом сценарии JVM запускает функцию majorGC (), которая проходит через полное пространство кучи, идентифицирует / отмечает неиспользуемые (нулевые или мертвые) объекты и подметает все эти объекты.
  • Помните, что удаление объектов из пространства кучи создаст дыры в памяти, что приведет к утечке памяти. Чтобы избежать такого сценария, сборщик мусора осуществляет сжатие пространства памяти

Примеры сборщика мусора в Java

Пример system.gc ():

class Demo (
public void finalize()(
System.out.println(“Object”);
)
public static void main(String args())(
Demo obj1 = new Demo();
Demo obj2 = new Demo();
obj1 = null;
obj2 = null;
System.gc();
)
)

Выход:

объект

Объяснение приведенного выше кода

  • В приведенном выше коде два объекта obj1 и obj2 указывают на ноль, поэтому они хранятся в пространстве Eden со значениями NULL и без ссылок
  • Система gc () вызовет поток демона сборки мусора, и оба объекта будут удалены из пространства.

Недостатки и недостатки

Ниже приведены некоторые плюсы и минусы Java Garbage Collector следующим образом:

Плюсы gc:

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

Минусы gc:

  • Сборщик мусора запустит основную функцию gc, которая будет проходить через все пространство кучи, замедляя вашу программу на несколько секунд.
  • Этот процесс займет больше процессорного времени, что замедлит работу системы.
  • Если вы работаете с приложением, требующим огромного объема памяти, используйте доступные флаги JVM.
  • Если пространство кучи заполнено и объекты не могут быть перелистаны или добавлены далее, Java выбрасывает из-за ошибки памяти, что замедляет работу всего приложения, а также может привести к утечкам памяти.

Рекомендуемые статьи

Это руководство к Что такое Java сборщик мусора? Здесь мы обсудим его работу с функциями, примерами, плюсами и минусами Java-сборщика мусора. Вы также можете посмотреть следующие статьи, чтобы узнать больше:

  1. Конструктор и деструктор в Java
  2. Деструктор на Яве
  3. C # против производительности Java
  4. Что такое JVM?