Co to jest Java Garbage Collector? - Przewodnik po Javie Garbage Collector

Spisie treści:

Anonim

Co to jest Java Garbage Collector?

Garbage collector to wątek demona, który zwalnia pamięć podczas działania. Odśmiecanie można również wyrazić jako recykling pamięci. Przeważnie w JVM ze względu na swoją wydajność używany jest moduł śmieciowy hotspotu Oracle. Obszar pamięci w JVM, w którym tworzone są obiekty, nazywa się stertą. Kupa jest podzielona na dwie części:

  1. Przestrzeń młodego pokolenia
  2. Stara / dzierżawiona przestrzeń generacji

Młode pokolenie ponownie dzieli się na 3 części

  1. Przestrzeń Eden
  2. Survivor From
  3. Survivor To

Bardziej szczegółowe wyjaśnienie podano w następnych punktach. Na przykład, jeśli utworzyłeś pamięć podręczną w swoim programie i jeśli obiekt pamięci podręcznej przetrwał wiele cykli GC, trafia do starej generacji. GC szuka obiektów, które nie są już potrzebne programowi i niszczy je.

Dlaczego Garbage Collector?

Przed Javą dwa najpopularniejsze języki to C i C ++. W C natrafiliśmy na calloc (), malloc (), realloc (), które przydzielą pamięć buforową, aw C ++ mamy destruktory. Wszystkie te funkcje dotyczą funkcji zwanej zarządzaniem pamięcią. Java zapewnia Garbage Collector jako automatyczne zarządzanie pamięcią z dwóch głównych powodów:

  • Niektóre utworzone obiekty stają się nieosiągalne
  • Odniesienia ze starych obiektów do młodych obiektów istnieją tylko w niewielkiej liczbie.

Najlepszą praktyką korzystania z modułu wyrzucania elementów bezużytecznych jest ustawianie flag na JVM.

Dam ci przykład dla nieosiągalnych obiektów

//class code
int i = 1;
if(i == 1)(
String s = abc;
System.out.println(s);
)
//class code

W powyższym przykładzie Java utworzy obiekt łańcuchowy, a zakres tego obiektu jest taki, że jeśli blok nie może być używany na zewnątrz. Tak więc, gdy kolekcja śmieci zostanie uruchomiona w tej klasie, oznaczy 's' jako nieosiągalny i nieużywany obiekt i usunie go.

Funkcje w Garbage Collector

  • Oznacz: Zaczyna od węzła głównego aplikacji (głównej), przechodzi po wykresie obiektów, zaznacza obiekty, które są osiągalne jako życie.
  • Usuń / Wyciągnij: Usuń nieosiągalne obiekty. Gdy GC usuwa obiekty, tworzy dziurę w stercie, co powoduje niespójność. Zatem stosuje się zagęszczanie.
  • Kompaktowanie: Kompaktuj pamięć, przemieszczając się wokół obiektów i zaznaczając przydział ciągły niż fragmentaryczny. To czasochłonne zadanie.

Jak działa Java Garbage Collector?

  • Istnieją dwa typy obiektów:

Obiekty aktywne : osiągalne (odniesienia z innego obiektu)

Dead Objects: Unreachable (brak odniesienia z dowolnego miejsca)

  • Wszystkie nowo utworzone obiekty są tworzone w przestrzeni Eden (przestrzeń Młodej Generacji).
  • Gdy przestrzeń Eden zostanie zapełniona, program minorGC () działa na przestrzeni Young Generation, która zaznacza wszystkie nieużywane lub martwe obiekty i usuwa je z pamięci.
  • Obiekty, które przeżyły ten cykl GC zostaną przeniesione do Survivor From space. Ten sam proces powtarza się i tym razem, gdy obiekty są przenoszone z kosmicznej Edenu do Ocalałego Z kosmosu, GC sprawdza, czy jest pełny, martwe obiekty są uwalniane, a ocalałe obiekty zostaną przeniesione również do Ocalonego.
  • Proces ten powtarza się i jeśli niektóre obiekty przetrwały próg liczby cykli GC, obiekty te są przenoszone do przestrzeni Starej Generacji.
  • W tym scenariuszu JVM uruchamia funkcję majorGC (), która działa przez całą przestrzeń sterty, identyfikuje / oznacza nieużywane (zerowe lub martwe) obiekty i zamiata wszystkie te obiekty.
  • Pamiętaj, że zamiatanie obiektów z przestrzeni sterty spowoduje powstanie dziur w pamięci, powodując wyciek pamięci. Aby uniknąć takiego scenariusza Garbage collector implementuje zagęszczanie przestrzeni pamięci

Przykłady Garbage Collector w Javie

Przykład 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();
)
)

Wynik:

Obiekt

Objaśnienie powyższego kodu

  • W powyższym kodzie dwa obiekty obj1 i obj2 wskazują na null, więc są przechowywane w przestrzeni Eden z wartościami null i bez odniesień
  • System gc () wywoła wątek demona zbierania elementów bezużytecznych i oba obiekty zostaną usunięte z przestrzeni.

Plusy i minusy

Poniżej przedstawiono niektóre zalety i wady Java Garbage Collector:

Zalety gc:

  • Odśmiecanie zwiększa wydajność pamięci, ponieważ spowoduje usunięcie wszystkich nieużywanych i pustych obiektów
  • Śmieciarka jest procesem automatycznym, więc programista może się tym nie zająć, ponieważ w innych językach bez śmieciarza programista musi zająć się nieuchwytnym problemem z pamięcią.

Wady gc:

  • Garbage collector uruchomi główną funkcję gc, która będzie działać przez całą przestrzeń sterty, powodując powolne przyspieszenie programu o kilka sekund.
  • Ten proces zajmie więcej czasu procesora, spowalniając system kodu.
  • Jeśli pracujesz nad aplikacją wymagającą dużej pamięci, skorzystaj z dostępnych flag JVM.
  • Jeśli przestrzeń sterty jest zapełniona, a obiektów nie można przesuwać ani dodawać dalej, wówczas Java wyrzuca błąd pamięci, co spowalnia całą aplikację i może powodować wycieki pamięci.

Polecane artykuły

To jest przewodnik po Czym jest Java Garbage Collector ?. Tutaj omawiamy jego działanie wraz z funkcjami, przykładami, zaletami i wadami modułu śmieciowego Java. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Constructor and Destructor w Javie
  2. Destructor w Javie
  3. Wydajność C # a Java
  4. Co to jest JVM?