Что такое Java сборщик мусора?
Сборщик мусора является потоком демона, который освобождает память во время выполнения. Сборка мусора также может быть выражена как переработка памяти. Главным образом в JVM, сборщик мусора точки доступа оракула используется из-за его эффективности. Область памяти в JVM, где создаются объекты, называется кучей. Куча делится на две части:
- Пространство молодого поколения
- Старое / заемное поколение
Молодое поколение снова делится на 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-сборщика мусора. Вы также можете посмотреть следующие статьи, чтобы узнать больше:
- Конструктор и деструктор в Java
- Деструктор на Яве
- C # против производительности Java
- Что такое JVM?