jest językiem programowania ogólnego przeznaczenia i jeśli wpadniesz na sytuację, w której w twoim programie są niewykorzystane dane i nie wiesz, jak sobie z tym poradzić, przyda się Garbage Collection w Javie. Dlatego piszę ten artykuł, aby pomóc Ci w obsłudze tych funkcji.
Omówię tematy w następującej kolejności:
- Co to jest Garbage Collection w Javie?
- Jak działa Garbage Collection?
- Rodzaje zbierania pamięci
- Zalety
- Najlepsze praktyki
Zacznijmy!
Co to jest Garbage Collection w Javie?
W Javie programiści stają przed problemem konieczności niszczenia obiekty które są nieużywane. Ale dzięki Garbage Collectorowi można to łatwo załatwić. Głównym celem tego Garbage Collectora jest zwolnienie pamięci sterty poprzez zniszczenie obiektów, które nie zawierają odniesienia. Ta technika jest znana jako Zbieranie śmieci.
Jest również uważany za program, który pomaga wykonywać automatyczne zarządzanie pamięcią. Kiedy są uruchamiane na JVM, obiekty są tworzone na stercie, który w rzeczywistości jest częścią pamięci przeznaczoną dla programu. W końcu niektóre obiekty nie będą już potrzebne. Plik Śmieciarz znajduje te nieużywane obiekty i usuwa je w celu zwolnienia pamięci.
- Programy, które nie zwalniają pamięci, mogą w końcu ulec awarii, gdy w systemie zabraknie pamięci do przydzielenia. Mówi się, że wszystkie te programy mają wycieki pamięci.
- Zbieranie elementów bezużytecznych w Javie odbywa się automatycznie w czasie życia programu, co eliminuje konieczność cofania alokacji pamięci, a tym samym zapobiega wyciekom pamięci.
- Metody takie jak wolny() w C i usunąć() w C ++ są używane, ale w Javie jest wykonywane automatycznie. Więc, zapewnia lepsze zarządzanie pamięcią.
Teraz zrozumiemy, jak to automatyczne usuwanie elementów bezużytecznych działa w Javie.
Uwaga : Mówi się, że obiekt kwalifikuje się do wyrzucania elementów bezużytecznych, jeśli jest nieosiągalny.
Jak działa Garbage Collection?
Wyrzucanie elementów bezużytecznych to proces pracy z pamięcią Heap, a także z pamięcią znak lub zidentyfikuj nieosiągalne obiekty i zniszcz je przez zagęszczenie.
Wyrzucanie elementów bezużytecznych w Javie jest procesem automatycznym i programista nie musi jawnie oznaczać obiektów do usunięcia. Implementacja żyje głównie w . Każda JVM może implementować czyszczenie pamięci. Jedynym wymaganiem jest zgodność ze specyfikacją JVM.
Mimo że dostępnych jest wiele maszyn JVM, Oracle HotSpot jest zdecydowanie najbardziej powszechny, ponieważ oferuje solidny i dojrzały zestaw opcji usuwania pamięci.
- HotSpot ma kilka garbage collectorów, które są zoptymalizowane pod kątem różnych przypadków użycia, a wszystkie zbieracze śmieci wykonują ten sam podstawowy proces.
- W pierwszym kroku obiekty bez odniesień są zidentyfikowane i oznaczone jako gotowe do czyszczenia pamięci.
- W drugim kroku zaznaczone obiekty są usuwane. Opcjonalnie pamięć można upakować po usunięciu obiektów przez moduł wyrzucania elementów bezużytecznych, więc pozostałe obiekty znajdują się w ciągłym bloku na początku sterty. Proces kompaktowania ułatwia przydzielanie pamięci do nowych obiektów sekwencyjnie po bloku pamięci przydzielonym do istniejących obiektów.
Wszystkie odśmiecacze HotSpot wdrażają generacyjną strategię zbierania, która kategoryzuje obiekty według wieku. Powodem stojącego za generacyjnym wyrzucaniem elementów bezużytecznych jest to, że większość obiektów jest krótkotrwała i będzie gotowa do czyszczenia pamięci wkrótce po utworzeniu.
c ++ przejdź do
Zobaczmy teraz, jakie są różne typy odśmiecaczy.
Rodzaje garbage collectora
JVM udostępnia cztery różne zbieracze elementów bezużytecznych, wszystkie pokoleniowe. Każdy ma swoje zalety i ograniczenia. Wybór używanego modułu odśmiecania pamięci należy do użytkownika i może wystąpić wiele różnic w przepustowości i przerwach w działaniu aplikacji.
Istnieją mianowicie 4 rodzaje śmieciarek.
- Szeregowy moduł wyrzucania elementów bezużytecznych (GC) :Wszystkie zdarzenia wyrzucania elementów bezużytecznych są przeprowadzane szeregowo w jednym wątku. Kompresja jest wykonywana po każdym wyrzuceniu elementów bezużytecznych.
- Równoległy / przepustowy GC: Wiele wątków jest używanych do wyrzucania drobnych / małych elementów bezużytecznych. Pojedynczy wątek jest używany do głównego wyrzucania elementów bezużytecznych i kompaktowania starej generacji. Ponadto wariant Parallel używa wielu wątków do głównego wyrzucania elementów bezużytecznych i kompaktowania starej generacji.
- Kolektor CMS :Wiele wątków jest używanych do małych / drobnych wyrzucania elementów bezużytecznych przy użyciu tego samego algorytmu, co Parallel. Większość operacji odśmiecania pamięci jest wielowątkowa, ale CMS działa równolegle wraz z procesami aplikacji, aby zminimalizować zdarzenia aplikacji. Nie jest wykonywane zagęszczanie.
- Kolektor G1 :Ten odśmiecacz jest zasadniczo przeznaczony jako zamiennik CMS. Jest równoległy i współbieżny jak CMS, ale działa zupełnie inaczej w porównaniu ze starszymi modułami odśmiecania pamięci.
Rozumiemy zalety zbierania elementów bezużytecznych w Javie.
Zalety
- Największą zaletą wyrzucania elementów bezużytecznych w języku Java jest to, że działa ono automatycznie obsługuje usuwanie nieużywanych obiektów lub niektórych obiektów, które są niedostępne w celu zwolnienia zasobów pamięci.
- Garbage Collection jest teraz nowym standardowym komponentem wielu popularnych języków programowania.
- To sprawia, że Java wydajnie korzysta z pamięci. Dzieje się tak, ponieważ moduł odśmiecania pamięci usuwa obiekty, do których nie istnieją odniesienia, z pamięci sterty.
- To jest zrobione automatycznie przez garbage collector, który jest częścią JVM.
Najlepsze praktyki
Najlepszym podejściem do dostosowania się do wyrzucania elementów bezużytecznych w języku Java jest ustawienie flag w maszynie JVM. Flagi mają możliwość dostosowania używanego garbage collectora. Pomaga w uczynieniu go najlepiej przystosowanym do przetwarzania zaplecza, w którym dopuszczalne są długie przerwy w usuwaniu elementów bezużytecznych.
java system.exit (1)
Inną rzeczą, na którą należy zwrócić uwagę, jest to, że moduł odśmiecania pamięci CMS został zaprojektowany tak, aby zminimalizować przerwy, co czyni go idealnym dla aplikacji GUI, w których bardzo ważna jest responsywność. Dodatkowe dostrojenie można przeprowadzić, zmieniając rozmiar sterty lub jej sekcji i mierząc wydajność czyszczenia pamięci.
Rzućmy okiem na ten program.
class Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ('Wartość a =' + a) System.out.println ('Wartość 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 ()}}
W tym przypadku te dwatworzone są obiekty i dwie zmienne referencyjne. Jeśli dodasz kolejne polecenie e3 = Null,dwie zmienne odniesienia będą wskazywać ten sam obiekt. A jeśli nie ma odniesienia do zmiennej, e3 = e2e3.showData () W tym momencie nie ma żadnych odniesień wskazujących na obiekt i staje się on kwalifikowalny do czyszczenia pamięci.
To prowadzi nas do końca artykułu „Garbage Collection in Java”. Dowiedzieliśmy się, jak usuwać nieużywane obiekty ze sterty i różne typy kolekcji.
Jeśli znalazłeś ten artykuł o „Garbage Collection in Java”, sprawdź autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Jesteśmy tutaj, aby pomóc Ci na każdym etapie Twojej podróży, opracowujemy program nauczania przeznaczony dla studentów i profesjonalistów, którzy chcą zostać programistą Java.
Masz do nas pytanie? Proszę wspomnieć o tym w sekcji komentarzy w tym artykule „Garbage Collection in Java ' a my skontaktujemy się z Tobą tak szybko, jak to możliwe.