- Co to jest zbieranie śmieci?
- Kiedy nazywa się metodę
finalize
? - Co się stanie, jeśli
finalize
w metodzie wystąpi wyjątek? - Co się stało
SoftReference
? - Co się stało
WeakReference
? - Co się stało
PhantomReference
? - Jak to działa
WeakHashMap
? Gdzie jest używany? - Dlaczego musisz przekazać kolejkę do konstruktora
PhantomReference
? - Dlaczego potrzebujesz rejestratora?
- Jakie znasz ustawienia rejestratora?
-
Jest to mechanizm niszczenia niepotrzebnych obiektów. Niepotrzebne przedmioty to nieużywane przedmioty. Istnieją dwa sposoby znajdowania takich obiektów: liczenie odniesień i śledzenie. W pierwszym przypadku każdy obiekt jest powiązany ze zmienną przechowującą liczbę odwołań do tego obiektu. Jeśli liczba ta spadnie do zera, obiekt uważa się za martwy. W drugim przypadku moduł zbierający elementy bezużyteczne podąża za referencjami do obiektów od korzeni do końca (aż do wartości null), przechodząc przez całe drzewo. Obiekty, do których nie może dotrzeć z punktów korzeniowych, są uważane za martwe. Punktami głównymi są wszystkie aktywne wątki, metoda główna, argumenty metody
main()
, a także wszystkie zmienne statyczne klasy, w której znajduje się metodamain()
.Ustalenie, które obiekty kwalifikują się do zniszczenia, to dopiero pierwsza część pracy śmieciarki. Druga część polega na ich usunięciu i pracy z pamięcią. Zastosowano tu podejście hybrydowe. Cała pamięć dostępna dla obiektów jest podzielona na trzy obszary: obszar młodych obiektów, obszar starych obiektów i obszar obiektów stałych (są to klasy, metadane, internowane ciągi znaków itp.). Pierwszy obszar podzielony jest na trzy kolejne podobszary: Eden oraz przestrzeń ocalałych 1 i 2. Eden przechowuje wszystkie nowo utworzone obiekty. Pozostałe dwie strefy przechowują obiekty, które przetrwały ostatnie wyrzucanie elementów bezużytecznych. Śmieciarz działa z całym tym obszarem (obszarem młodych obiektów) w następujący sposób. Podczas następnego zbierania śmieci znajduje żywe obiekty w obszarze Edenu i kopiuje je do drugiego obszaru ocalałego. Następnie szuka również żywych obiektów w pierwszym obszarze i kopiuje je albo do drugiego obszaru ocalałych, albo, jeśli są już wystarczająco „stare”, do obszaru starego pokolenia. Następnie oczyszcza obszar Edenu i obszar pierwszego ocalałego. Następnie uważa drugi obszar ocalałych za pierwszy. I tyle, kończy się wywóz śmieci na tym terenie.
Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые obiektы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых obiektов. После этого сборщик мусора завершает свою работу.
-
Перед уничтожение obiektа сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых obiektов, для этого надо вызвать метод
System.runFinalization()
LubRuntime.getRuntime().runFinalization()
. -
Это исключение будет проигнорировано, и произойдёт выход из метода.
-
SoftReference
переводится Jak "мягкая połączyć". Эта połączyć на obiekt, но более слабая, чем обычная połączyć (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягkodостижимыми. Такие obiektы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие obiektы. -
WeakReference
— это так называемая слабая połączyć на obiekt. Она ещё слабее Soft-ссылки. Все obiektы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора. -
PhantomReference
— это самая слабая połączyć. Механизм работы с такими połączyć запускается только если на obiekt нет больше ниJakих других ссылок. Призрачные ссылки используются для сложной proceduryы удаления obiektа. Это может быть необходимо, если obiekt делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС Lub пишет своё состояние в файл, Lub делает ещё что-то важное и сложное.Механизм работы с такими połączyćми следующий. Если на obiekt не осталось больше ниJakих других ссылок, и у него переопределён метода
finalize()
, то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот obiekt пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный obiekt помещается в очередь призрачных obiektов, из которой будет удалён, когда у его призрачной ссылки вызовут методclear()
. Также стоит отметить, что методаget()
у призрачной połączyć всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращаетnull
, только если obiekt уже уничтожен). -
WeakHashMap
— этоHashMap
, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на obiekt существует только połączyć вWeakHashMap
, то изWeakHashMap
будет удалена вся пара "ключ-oznaczający", связанная с этим obiektом.В связи с этим данная коллекция может быть использована для хранения Jakой-то дополнительной, не очень важной информации об obiektе. Также её удобно использоваться для хранения Jakой-то временной информации (которая нужная только в рамках данной операции).
-
Эта очередь используется для отслеживания того, что obiekt больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным obiektом (например, удаление созданных файлов).
-
Rejestrator jest potrzebny do zapisywania informacji o zachowaniu programu, a także niektórych jego stanach. Może być używany do debugowania i identyfikowania błędów i awarii programu. Rejestrator umożliwia także programiście otrzymywanie informacji zwrotnych z programu podczas jego działania. Ponadto w przypadku awarii krytycznych rejestrator może szybko powiadomić o tych awariach odpowiednie osoby (np. programistów, klientów, kierowników projektów, wsparcie techniczne itp.).
-
Konfigurując rejestrowanie, możesz określić następujące rzeczy:
- miejsce, w którym zostaną zapisane informacje (plik, konsola, baza danych, sieć itp.)
- na jakim poziomie wiadomości będą nagrywane
- typ wpisów dziennika
- dla plików możesz określić: ścieżkę do pliku i katalogu, rozmiar pliku, liczbę plików
- określ dla każdego pakietu własny poziom komunikatów, które będą zapisywane w dzienniku
GO TO FULL VERSION