CodeGym/Java курс/Модул 3/Събиране на боклук в Java

Събиране на боклук в Java

На разположение

Припомнете си Howво е събиране на отпадъци в Java

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

Понякога програмистът може да забрави да унищожи безполезни обекти и паметта, разпределена за тях, не се освобождава. Консумира се все повече и повече системна памет и в крайна сметка не се разпределя повече. Такива applications страдат от „изтичане на памет“.

След определен момент вече няма достатъчно памет за създаване на нови обекти и програмата прекратява необичайно поради OutOfMemoryError .

Събирането на отпадъци в Java е процесът, чрез който Java програмите управляват автоматично паметта. Java програмите се компorрат в byte code, който работи на Java Virtual Machine (JVM).

Когато Java програмите се изпълняват на JVM, обектите се създават в купчината, която е частта от паметта, разпределена за тях.

Докато Java приложение работи, в него се създават нови обекти. В крайна сметка някои обекти вече не са необходими. Можем да кажем, че във всеки даден момент хийп паметта се състои от два типа обекти.

  • На живо - Тези обекти се използват, те са препратени от някъде другаде.
  • Мъртви - тези обекти не се използват никъде другаде, няма препратки към тях.

Събирачът на отпадъци намира тези неизползвани обекти и ги премахва, за да освободи памет.

Събирането на отпадъци в Java е автоматичен процес . Програмистът не трябва изрично да маркира обекти за изтриване.

Всяка JVM може да реализира своя собствена version на събиране на отпадъци. Колекторът обаче трябва да отговаря на стандартната спецификация на JVM за работа с обекти, присъстващи в паметта на купчината, за да маркира or идентифицира недостижими обекти и да ги унищожи чрез уплътняване.

Достъпност на обекта

За да разпознаем даден обект като жив, наличието на връзки не е достатъчно. Това е така, защото някои мъртви обекти могат да се отнасят за други мъртви обекти. Ето защо е необходимо сред всички препратки към даден обект да има поне една от „жив” обект.

Достъпност на обекта

Събирачите на боклук работят с концепцията за GC Roots ( корени за събиране на боклук ), за да правят разлика между живи и мъртви обекти. Има 100% живи обекти и от тях има връзки, които анимират други обекти и т.н.

Примери за такива корени:

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

Стъпки за събиране на боклук в Java

Стандартното внедряване на събиране на отпадъци има три стъпки.

1. Маркирайте обектите като живи

В този момент събирачът на боклук (GC) трябва да идентифицира всички живи обекти в паметта, като премине през обектната графика.

Когато посещава обект, той го маркира като наличен и следователно жив. Всички обекти, които не са достъпни от корените на GC, се считат за кандидати за събиране на боклук.

2. Почистване на мъртви предмети

След фазата на маркиране пространството в паметта се заема от живи (посетени) or мъртви (непосетени) обекти. Фазата на почистване освобождава фрагментите от паметта, които съдържат тези мъртви обекти.

3. Компактно подреждане на останалите обекти в паметта

Не е необходимо мъртвите обекти, които са премахнати в предишната фаза, да са един до друг. Така рискувате да получите фрагментирано (полупразно) пространство в паметта.

Но, разбира се, като се предвиди това, е възможно да се уплътни паметта в момента, когато събирачът на боклук премахва мъртви обекти. Останалите ще бъдат разположени в съседен блок в началото на купчината.

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

Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари