Garbage Collection v Javě: Vše, co potřebujete vědět

Tento článek o Garbage collection v Javě vám dává jasnou představu o tom, jak to funguje, o jejích typech a různých metodách v rámci garbage collection v Javě

je univerzální programovací jazyk a pokud v případě, že narazíte na situaci, kdy jsou ve vašem programu nevyužitá data a nevíte, jak s nimi zacházet, přijde vhod Garbage Collection v Javě. Píšu tedy tento článek, abychom vám pomohli s manipulací s těmito funkcemi.

Témat se budu věnovat v následujícím pořadí:





Začněme!

Co je Garbage Collection v Javě?

V Javě čelí programátoři problému zničit předměty které jsou mimo provoz. Ale s Garbage Collectorem se o to dá snadno postarat. Hlavním cílem tohoto programu Garbage Collector je uvolnění paměti haldy zničením objektů, které neobsahují odkaz. Tato technika je známá jako Odpadky.



Je také považován za program, který pomáhá provádět automatickou správu paměti. Když jsou spuštěny na JVM, objekty jsou vytvářeny na haldě, což je ve skutečnosti část paměti, která je věnována programu. Některé objekty již nakonec nebudou potřeba. The Popelář najde tyto nepoužívané objekty a odstraní je, aby uvolnil paměť.

  • Programy, které nedealokují paměť, se mohou nakonec přerušit, když v systému nezbude žádná paměť, kterou by bylo možné alokovat. U všech těchto programů se říká, že mají úniky paměti.
  • Garbage collection v Javě se děje automaticky během životnosti programu, což eliminuje nutnost de-alokovat paměť, a tak se vyhnout úniku paměti.
  • Metody jako volný, uvolnit() v C a vymazat() v C ++ se používají, ale v Javě se provádí automaticky. Tak, poskytuje lepší správu paměti.

Pojďme pochopit, jak tento automatický sběr odpadu funguje v Javě.

Poznámka : Objekt je považován za způsobilý pro odvoz odpadu, pokud je nedosažitelný.



Jak funguje Garbage Collection?

Garbage Collection je proces práce s pamětí haldy a také označit nebo identifikujte nedosažitelné objekty a zničte je zhutněním.

java se vymanila z metody

Sběr odpadu v Javě je automatický proces a programátor nemusí explicitně označovat objekty, které mají být odstraněny. Implementace žije hlavně v . Každý JVM může implementovat uvolňování paměti. Jediným požadavkem je, aby splňoval specifikaci JVM.

I když je k dispozici mnoho JVM, Oracle HotSpot je zdaleka nejběžnější, protože nabízí robustní a vyspělou sadu možností sběru odpadu.

  • HotSpot má několik garbage collectorů, které jsou optimalizovány pro různé případy použití, a všichni garbage collectors se řídí stejným základním procesem.
  • Hned v prvním kroku neodkazované objekty jsou identifikovány a označeny jako připravené k odvozu odpadu.
  • Ve druhém kroku jsou označené objekty odstraněny. Paměť lze volitelně zkomprimovat poté, co garbage collector odstraní objekty, takže zbývající objekty jsou v souvislém bloku na začátku haldy. Proces zhutnění usnadňuje postupné přidělování paměti novým objektům po bloku paměti přidělenému existujícím objektům.

Všichni sběratelé odpadu HotSpot implementují generační strategii sběru, která kategorizuje objekty podle věku. Důvodem generačního uvolňování paměti je, že většina objektů má krátké trvání a bude připravena na uvolnění paměti brzy po vytvoření.

Nyní se podívejme, jaké jsou různé typy sběračů odpadků.

Druhy sběrače odpadků

JVM poskytuje čtyři různé sběrače odpadků, všechny generační. Každý z nich má své vlastní výhody a omezení. Volba, kterou sběratel odpadků použít, leží na uživateli a může existovat řada rozdílů v propustnosti a pozastavení aplikace.

Jmenovitě existují 4 typy sběračů odpadků.

  • Serial Garbage Collector (GC) :Všechny události uvolňování paměti jsou prováděny sériově v jednom vlákně. Zhutnění se provádí po každém uvolnění paměti.
  • Paralelní / propustnost GC: Pro menší / malé uvolňování paměti se používá více vláken. Jedno vlákno se používá pro hlavní uvolňování paměti a zhutňování staré generace. Varianta Parallel také používá více vláken pro hlavní uvolňování paměti a zhutňování staré generace.
  • Sběratel CMS :Více vláken se používá pro malé / menší uvolňování paměti pomocí stejného algoritmu jako Parallel. Většina uvolňování paměti je vícevláknová, ale CMS běží souběžně s aplikačními procesy, aby se minimalizovaly události aplikace. Není provedeno žádné zhutnění.
  • Sběratel G1 :Tento garbage collector je v zásadě určen jako náhrada za CMS. Je paralelní a souběžný jako CMS, ale ve srovnání se staršími garbage collectory funguje zcela odlišně.

Pojďme pochopit výhody sběru Garbage v Javě.

hybridní framework v selenovém webdriveru

Výhody

  • Největší výhodou shromažďování paměti Java je to, že se automaticky zpracovává odstranění nepoužitých objektů nebo některých objektů, které jsou nepřístupné, aby uvolnily paměťové prostředky.
  • Garbage Collection je nyní novou standardní součástí mnoha populárních programovacích jazyků.
  • Díky ní je paměť Java efektivní. Je to proto, že garbage collector odebere neodkazy objekty z paměti haldy.
  • to je automaticky provedeno sběratelem odpadků, který je součástí JVM.

Osvědčené postupy

Nejlepší přístup k přizpůsobení se uvolňování paměti Java je nastavením příznaků na JVM. Příznaky mají schopnost upravit garbage collector, který se má použít. Pomáhá při vytváření nejvhodnějšího pro zpracování back-endu, kde jsou přijatelné dlouhé pauzy pro uvolňování paměti.

Další věc, kterou je třeba si uvědomit, je, že sběrač odpadků CMS je navržen tak, aby minimalizoval pauzy, což je ideální pro aplikace GUI, kde je velmi důležitá odezva. Další jemné doladění lze provést změnou velikosti haldy nebo jejích sekcí a měřením účinnosti uvolňování paměti.

Podívejme se na tento program.

třída Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ('Hodnota a =' + a) System.out.println ('Hodnota b =' + b)} public static void main (String args []) {Edureka e1 = new Edureka () Edureka e2 = new Edureka () e1.setData (1,2) e2.setData (3, 4) e1.showData () e2.showData () // Edureka e3 // e3 = e2 //e3.showData () // e2 = null //e3.showData () // e3 = null //e3.showData ()}}

V tomto případě dvajsou vytvořeny objekty a dvě referenční proměnné. Pokud přidáte další příkaz e3 = Null,dvě referenční proměnné budou ukazovat na stejný objekt. A pokud neexistuje žádný odkaz na proměnnou, e3 = e2e3.showData () V tomto okamžiku neexistují žádné odkazy směřující na objekt a stane se způsobilým pro sběr odpadků.

Tím se dostáváme na konec tohoto článku „Garbage Collection in Java“. Naučili jsme se, jak odebrat nepoužívané objekty v haldě a různé typy shromažďování.

Pokud jste našli tento článek o „Garbage Collection v Javě“, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Jsme tu, abychom vám pomohli s každým krokem na vaší cestě, vytvoříme učební plán určený pro studenty a profesionály, kteří chtějí být vývojářem Java.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v této části „Odpadky v Javě ' a my se vám ozveme co nejdříve.