Какво е Java Garbage Collector? - Ръководство за Java Garbage Collector

Съдържание:

Anonim

Какво е Java Garbage Collector?

Събирачът за боклук е демонова нишка, която освобождава паметта по време на изпълнение. Събирането на боклук може да се изрази и като рециклиране на паметта. Най-вече в JVM се използва боклукът за събиране на боклук oracle hotspot поради своята ефективност. Областта на паметта в JVM, където се създават обекти, се нарича heap. Купата е разделена на две части:

  1. Космос на младото поколение
  2. Старо пространство / поколение поколение

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

  1. Eden пространство
  2. Сървайвър от
  3. Survivor To

По-задълбочено обяснение е дадено в следващите точки. Например, ако сте създали кеш в програмата си и ако кеш обектът е преживял много цикли на GC, той преминава в старото поколение. GC търси обекти, които вече не са необходими на програмата и ги унищожава.

Защо боклук?

Преди Java два от най-популярните езици бяха C и C ++. В C попаднахме на calloc (), malloc (), realloc (), който ще разпределя буферна памет, а в C ++ имаме разрушители. Всички тези функции са за функцията, наречена управление на паметта. Java предоставя Garbage collector като автоматично управление на паметта по основните две причини:

  • Някои създадени обекти стават недостъпни
  • Препратките от стари предмети към млади обекти съществуват само в малък брой.

Най-добрата практика за използване на колектор за боклук е да поставите знамена на 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 се запълни, на пространство Young Young Generation се стартира програма minorGC (), която маркира всички неизползвани или мъртви обекти и ги изхвърля от паметта.
  • Обектите, оцелели в този GC цикъл, ще бъдат преместени в Survivor From Space. Същият процес се повтаря и този път, когато обектите са преместени от пространството на Eden към Survivor От космоса, GC проверява дали е пълен, мъртвите обекти са освободени и оцелелите обекти ще бъдат преместени и в Survivor.
  • Този процес се повтаря и ако някои обекти са преживели праг без GC цикли, тези обекти са преместени в Old Generation пространство.
  • В този сценарий JVM изпълнява функцията majorGC (), която преминава през пълно пространство за купчина, идентифицира / маркира неизползвани (нулеви или мъртви) обекти и помества всички тези обекти.
  • Не забравяйте, че метенето на предмети от купчината ще създаде дупки в паметта, причинявайки теч на паметта. За да се избегне такъв сценарий Garbage collector осъществява уплътняване на паметта

Примери за събиране на боклук в 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 сочат към null, така че се съхраняват в Eden пространство с нулеви и нереферирани стойности
  • System gc () ще извика демонова нишка за събиране на боклука и двата обекта се изтриват от пространството.

Против и минуси

По-долу са някои плюсове и минуси на Java Garbage Collector, както следва:

Плюсове на gc:

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

Минуси от gc:

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

Препоръчителни статии

Това е ръководство за Какво е Java Garbage Collector ?. Тук обсъждаме нейната работа заедно с Функции, пример, плюсове и минуси на Java боклук. Можете също да разгледате следните статии, за да научите повече -

  1. Конструктор и деструктор в Java
  2. Destructor в Java
  3. C # срещу Java Performance
  4. Какво е JVM?