what is garbage collection java
Овај водич објашњава шта је сакупљање смећа у Јави и како функционише сакупљач смећа. Такође ћете научити о алгоритмима за сакупљање смећа:
Читаоци који познају Ц / Ц ++ морају бити свесни да је одговорност програмера да креира и избрише објекте у Ц / Ц ++.
Озбиљне грешке настају ако програмер заборави да уништи створене објекте. То је зато што неуспех у уништавању предмета може проузроковати „ Без меморије ”Грешке, цурење меморије итд.
Ова ситуација је у потпуности решена на Јави јер није потребно да програмер води евиденцију о објектима. Јава се брине за уништавање предмета за нас путем аутоматског сакупљања смећа.
=> Посетите овде да бисте научили Јаву из нуле.
Процес којим се објекти који се више не користе уклањају из меморије хрпе назива се „Скупљање смећа“. Техника прикупљања смећа део је управљања меморијом на Јави.
Тако у Јави Сакупљач смећа уништава све објекте који више нису у употреби.
Шта ћете научити:
- Шта је сакупљач смећа у Јави?
- Како сакупљање смећа функционише на Јави?
- Алгоритми сакупљања смећа у Јави
- Закључак
Шта је сакупљач смећа у Јави?
Сакупљањем смећа у Јави управља програм под називом Гарбаге Цоллецтор.
Сакупљач смећа може се дефинисати као програм који се користи за аутоматско управљање меморијом руковањем де-алокацијом објекта.
Знамо да се у језику Јава нови објекти креирају и додељују меморију помоћу новог оператора. Меморија додељена објекту помоћу новог оператора остаје додељена док референце не користе овај објекат.
Чим референце престану да постоје, меморија коју објекат заузима се враћа. Јава тада аутоматски уклања уклањање или уништавање објеката и не морамо изричито уништавати објекат.
Ова техника је техника сакупљања смећа на Јави где програмери не морају изричито да се баве уклањањем објеката.
Имајте на уму да ако програми не додијеле меморију када објектима то није потребно, на крају неће остати меморија за додјелу и програми ће се срушити. Ова ситуација се назива цурењем меморије.
Сакупљач смећа увек ради у позадини на даемон нити. Сакупљач смећа сматра се најбољим примером демонске нити.
Гарбаге Цоллецтор ради са намером да ослободи меморију гомиле. То чини уништавањем предмета који су „недостижни“.
Шта је „недостижни“ предмет?
Предмет постаје недостижан када са њим није повезана ни једна референца.
Размотрите следећи део кода:
Integer ref_obj = new Integer (5); //ref_obj is a reference to Integer ref_obj = null; //Integer object now becomes unreachable
Као што се види из горњег кода, објекат је доступан све док је са њим повезана референца. Оног тренутка када се уклони референтна асоцијација (постављање референце на нулу у горе наведеном случају) објекат постаје недоступан.
Када објекат постане недоступан, постаје прихватљив за прикупљање смећа (ГЦ).
Како можемо да направимо објекат подобним за ГЦ?
Иако програмер није дужан да уништава објекте онако како се о њима брине ГЦ, барем програмер може учинити те објекте недоступнима када више нису потребни.
Радећи ово, ГЦ ће сакупљати недостижне предмете и уништавати их.
Постоје неки начини да се објекат учини прихватљивим за ГЦ чинећи га недостижним.
Су:
# 1) Поништи референцу
С обзиром на референцу додељену објекту, ако овај објекат више није потребан, доделите референцу нулл.
Student s = new Student (); s = null;
Када је с постављено на нулу, објект Студент постаје недоступан.
# 2) Поново доделите Референцу
Ово је још један начин да објекти постану подобни за ГЦ.
Размотрите следећи код.
Student s1 = new Student (); Student s2 = new Student (); s1 = s2;
Сада када смо доделили с1 другом објекту, дереференциран је објект Студент на који се позива с1.
# 3) Направите анонимни објекат
Стварањем анонимног објекта можемо објекте учинити прихватљивим за ГЦ.
Можемо створити анонимни објекат као што је приказано доле:
new Student();
Једном када објекте прихватимо за ГЦ, ГЦ може или не мора одмах да их уништи. То је зато што не можемо изричито присилити ГЦ да извршава како и када желимо.
Када ради Сакупљач смећа?
На ЈВМ-у је да покрене програм Скупљање смећа. Када ЈВМ покрене Сакупљач смећа, недоступни објекти се уништавају. Али ипак, не можемо гарантовати када ће ЈВМ радити.
Иако не можемо присилити ГЦ на извршење, врло добро можемо затражити сакупљање смећа.
ГЦ се може затражити коришћењем било које од следећих метода.
# 1) Систем.гц (): Класа Систем Јава пружа статичку методу гц () помоћу које можемо тражити од ЈВМ-а да покрене Гарбаге Цоллецтор.
# 2) Рунтиме.гетРунтиме (). Гц (): Као и Систем.гц (), такође можемо користити гц () методу „Рунтиме цласс“ да бисмо затражили од ЈВМ-а да покрене Гарбаге Цоллецтор.
Белешка: Не постоји гаранција да ће се Сакупљач смећа покренути након захтева ове две методе.
Финализација
Финализацију врши Гарбаге Цоллецтор непосредно пре уништавања предмета. Као део технике финализације, Сакупљач смећа позива методу финализе () на објекту. Метода финализе () користи се за обављање активности чишћења.
Методу финализе () пружа класа „Објецт“ и има следећи прототип.
protected void finalize () throws Throwable
Позива се метода финализе () кад год се предмет прикупља смеће
Белешка: Сакупљач смећа прикупља само објекте који су створени помоћу нове кључне речи. За остале објекте морамо користити методу финализе () да бисмо извршили чишћење.
Програм испод приказује једноставну колекцију смећа на Јави.
class TestGC{ @Override // finalize method: called on object once // before garbage collecting it protected void finalize() throws Throwable { System.out.println('Garbage collector called'); System.out.println('Object garbage collected : ' + this); } } class Main{ public static void main(String args()){ TestGC gc1=new TestGC(); TestGC gc2=new TestGC(); gc1 = null; //nullify gc1 System.gc(); //request for GC to run gc2 = null; //nullify gc2 Runtime.getRuntime().gc(); //request for GC to run } }
Оутпут
У горенаведеном програму створили смо класу ТестГЦ. У овој класи смо заменили методу финализе (). Затим у главној класи креирамо два објекта класе ТестГЦ. Прво поништавамо објекат и позивамо Систем.гц () да затражимо Сакупљач смећа.
Даље, поништавамо други објекат и позивамо методу Рунтиме.гетРунтиме.гц () да бисмо затражили Гарбаге Цоллецтор. Излаз два пута приказује излаз методе финализације, показујући тако да је Сакупљач смећа два пута изводио.
Белешка: Иако имамо овај излаз, није загарантовано да ћемо сваки пут добити исти излаз. У потпуности зависи од ЈВМ-а.
Како сакупљање смећа функционише на Јави?
У овом одељку ћемо видети како Сакупљање смећа ради на Јави.
Током сакупљања смећа, Сакупљач смећа претражује меморију гомиле, а затим „обележава“ недоступне објекте. Тада их уништава.
Али проблем настаје када се број предмета повећава. Како се предмети повећавају, време потребно за прикупљање смећа такође се повећава док се траже недоступни предмети. Међутим, то не утиче превише јер већина предмета има кратак животни век.
Позива се горе наведено понашање „Генерацијско сакупљање смећа“ и требало би да побољша перформансе ЈВМ-а. У овом приступу, читав простор Купе је подељен на - младу генерацију, стару или старомодну генерацију и трајну генерацију.
# 1) Простор хрпе младе генерације: Сви нови објекти су створени у овом простору. Једном када се простор попуни, одвија се Минор ГЦ у којем се сви мртви предмети уништавају. Мали ГЦ поступак је брз и брз јер је већина предмета мртва. Предмети који су преживели младу генерацију премештају се у старије генерације.
# 2) Простор хрпе старе генерације: Ова генерација чува предмете који дуго опстају. Када се достигне праг старости постављен за младу генерацију, објекат се премешта у стару генерацију. Када се попуни простор старе генерације, изводи се главни ГЦ.
Главни ГЦ је спор јер су овде укључени објекти живи објекти. Понекад се очисти читав простор Хеап-а који укључује младе, као и старе генерације. Ово се назива „Фулл ГЦ“.
# 3) Стална генерацијаЛ До Јаве 7 некада је постојала стална генерација (Перм Ген). ЈВМ је користио метаподатке који се чувају у Перму. ЈВМ је користио ове метаподатке за опис класа и метода коришћених у апликацији. Перм Ген је уклоњен у Јави 8.
Прикупљање смећа Јава 8: Перм Ген и Метаспаце
Већ смо споменули простор Перм Ген који је био присутан до Јаве 7. Међутим, сада у Јави 8, ЈВМ представља метаподатке класе користећи матичну меморију која се назива „Метаспаце“.
Поред Метаспаце-а, постоји нова застава названа „МакМетаспацеСизе“ која ограничава меморију која се користи за метаподатке класе. Ако за МакМетаспацеСизе није наведена вредност, тада ће је Метаспаце променити величину за време извођења у складу са захтевом апликације.
Када простор метаподатака класе достигне МакМетаспацеСизе, активира се Метаспаце ГЦ. Када постоји прекомерни Метаспаце ГЦ, то указује на цурење меморије класа, учитавача класа итд., Као и на неадекватно одређивање величине.
Алгоритми сакупљања смећа у Јави
Постоје различити начини на који се врши прикупљање смећа. У овом одељку ћемо представити четири таква начина или алгоритме за прикупљање смећа у Јави.
Серијски ГЦ
Серијски ГЦ је најједноставнији ГЦ алгоритам. Углавном ради на малим величинама гомиле и системима са једним навојем. Током рада, Сериал ГЦ замрзава све апликације.
Да бисмо укључили Сериал ГЦ, можемо користити следећу ЈВМ опцију.
животни циклус квара у тестирању софтвера
java –xx:+UseSerialGC –jar Application.java
Горња команда се може дати у командној линији. Овде је Апплицатион.јава датотека за коју треба бити омогућен серијски ГЦ.
Пропусност / паралелни ГЦ
ТХЕ Паралел ГЦ алгоритам је подразумевани у ЈДК 8. Овај алгоритам користи више нити за скенирање простора гомиле и збијање. Овај алгоритам је погодан углавном за апликације које се могу носити са паузама нити и оптимизирати трошкове процесора.
Један недостатак паралелног ГЦ је тај што током извођења мањег или потпуног ГЦ алгоритам паузира нити апликације.
Сакупљач ЦМС-а
ЦМС је кратица за „ Конкурентни Марк Свееп ”. Овај алгоритам користи вишеструко истовремено нити за скенирање гомиле ( марка ) за идентификовање неискоришћених предмета и рециклирање ( пометати ) њих. Сакупљач ЦМС-а има режим Стоп-Тхе-Ворлд (СТВ).
Сакупљач прелази у овај режим у два сценарија:
- Када се до објеката који припадају старој генерацији може доћи из статичких променљивих или из улазних тачака нити. Дакле, овај режим је укључен током иницијализације почетних ознака корена.
- Када алгоритам ради истовремено, апликација мења стање и присиљава сакупљач да се врати како би био сигуран да су тачни објекти означени.
Сакупљач ЦМС-а међутим може патити од „неуспеха у промоцији“. Па шта је промотивни неуспех? Ако се објекти из простора младе генерације преместе у стару генерацију, а сакупљач није направио довољно простора за ове објекте у простору гомиле старе генерације, тада ће наступити промотивни неуспех.
Да бисмо спречили промотивни неуспех, сакупљачу можемо пружити више позадинских нити или старијој генерацији обезбедити већу величину гомиле.
Сакупљач Г1
Сакупљач Г1 је сакупљач „Прво смеће“. Дизајниран је за гомиле веће од 4 ГБ. На основу величине гомиле, она дели величину гомиле на регионе величине од 1МБ до 32МБ.
Сакупљач Г1 означава предмете у зависности од живости предмета на читавој гомили. Након ове фазе обележавања, Г1 је свестан празних региона. Тако прикупља недоступне предмете из ових региона, ослобађајући тако велику количину простора. Отуда је назван Гарбаге-Фирст, јер прво сакупља регије у којима се налази смеће.
Такође испуњава кориснички дефинисано време паузе коришћењем модела предвиђања паузе одабиром броја региона за прикупљање у зависности од наведеног циља времена паузе.
Предност сакупљања смећа
- Прикупљање смећа чини управљање меморијом у Јави ефикасним јер уклања нереференциране предмете из гомиле меморије без ометања програмера.
- Како је прикупљање смећа аутоматско и део је ЈВМ-а, програмеру нису потребни додатни напори да поврати меморију или уништи објекте.
- Програмер не мора да напише било који одређени код за раздвајање меморије и брисање објеката као што је то учињено у Ц / Ц ++.
Често постављана питања
П # 1) Која је улога сакупљача смећа?
Одговор: У Јави је Сакупљач смећа главна страна у управљању меморијом и има задатак да сакупља недоступне предмете и поврати меморију.
П # 2) Шта подразумевате под скупљањем смећа?
Одговор: Сакупљање смећа је техника којом се меморијом аутоматски управља повратом неискоришћене меморије. То је карактеристика присутна у програмским језицима као што је Јава, због чега програмери не морају да прате неискоришћене објекте и уништавају их. То се врши аутоматски помоћу Сакупљања смећа.
К # 3) Ко је одговоран за прикупљање смећа на Јави?
Одговор: Управљање меморијом Јава одговорно је за прикупљање смећа.
К # 4) Како можемо спречити прикупљање смећа на Јави?
Одговор: Како Гарбаге Цоллецтор не враћа меморију променљивих / објеката који су живи, најбољи начин да се спречи прикупљање смећа је да наставите да користите променљиве / објекте током целог програма.
К # 5) Како можете бити сигурни да се неки предмет сакупља смеће?
Одговор: Објекат испуњава услове за прикупљање смећа када је недоступан, тј. Када се више не односи на објект. Иако не можемо присилити Гарбаге Цоллецтор да ради кад год желимо, увек можемо тражити да се покреће помоћу Систем.гц ().
Закључак
Прикупљање смећа у Јави о којем смо говорили у овом упутству је аутоматско и програмер не мора да се брине око брисања објеката или променљивих додељених у програму.
Аутоматско сакупљање смећа на Јави је најважнија карактеристика језика и део је управљања меморијом на Јави.
Иако прикупљање смећа врши ЈВМ и изван је досега програмера, увек можемо затражити да се Гарбаге Цоллецтор покрене помоћу гц () методе система и класе извршавања.
У овом упутству смо разговарали о процесу финализације који се изводи пре него што објекат уништи Гарбаге Цоллецтор. Такође смо разговарали о процесу сакупљања смећа на Јави. На крају, разговарали смо о различитим алгоритмима које користи Сакупљач смећа.
Овим је завршена наша дискусија о Сакупљачу смећа у Јави.
=> Овде припазите на једноставну серију Јава тренинга.
Препоручено читање
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- За шта се користи Јава: 12 Јава апликација у стварном свету
- Јава Стринг Водич | Јава стринг методе са примерима
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Јава компоненте: Јава платформа, ЈДК, ЈРЕ и Јава виртуелна машина
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Јава виртуелна машина: како ЈВМ помаже у покретању Јава апликације
- Водич за Јава рефлексију са примерима