Co to jest miękkie odniesienie?

W języku programowania Java® stale tworzone są odniesienia do obiektów, ciągów znaków i zmiennych, nawet jeśli programista nie jest świadomy tych odniesień. Te odniesienia komunikują się bezpośrednio z garbage collectorem, funkcją, która zbiera niepotrzebne informacje i wyrzuca je, aby nie zajmowały już pamięci. Domyślnie wszystkie odniesienia są silnymi odniesieniami i są ustawiane bez żadnego kodowania, co oznacza, że ​​nie są udostępniane garbage collectorowi. Miękkie odniesienie pozwala na wyrzucenie danych. Jest to odniesienie średniego poziomu dla wszystkich niemocnych odwołań.

Za każdym razem, gdy programista robi coś z Javą®, czy to tak proste, jak tworzenie ciągu znaków czy tworzenie złożonych funkcji, pojawia się odwołanie. Programista nie musi pisać polecenia referencyjnego; odniesienie jest tworzone automatycznie i domyślnie jest silnym odniesieniem. Oznacza to, że danych z referencji nie można wyrzucić, ponieważ są one połączone z integralnymi obiektami potrzebnymi dla całego skryptu.

Niektóre dane należy jednak wyrzucić, ponieważ w przeciwnym razie zajmują dużo pamięci. Na przykład, jeśli programista zbuduje skrypt, w którym używane są numery seryjne lub gromadzone lub tworzone są inne tymczasowe informacje, przechowywanie tych informacji staje się szkodliwe. Program Java® odmówiłby wyrzucenia informacji, nawet jeśli są niepotrzebne, a skrypt do działania potrzebowałby coraz więcej pamięci.

Określając ciąg lub sekcję jako miękkie odniesienie, które należy umieścić w kodzie, informuje to garbage collector, że dane mogą zostać uwolnione. Po zwolnieniu ciąg lub sekcja będzie odczytywana jako „null”. Odśmiecacz, w zależności od ustawienia, zdecyduje, kiedy dane mają zostać wyrzucone.

Istnieją trzy niemocne odniesienia: miękkie odniesienie, słabe odniesienie i odniesienie fantomowe. Słabe odniesienie jest najsłabsze, a jego dane są szybko wyrzucane. W następnej kolejności są miękkie referencje, które najlepiej sprawdzają się w skryptach, w których dane tymczasowe mogą być używane kilka razy. Odwołanie fantomowe jest wyrzucane niemal automatycznie, w ciągu sekundy i powinno być używane oszczędnie.

Czas pozostawania miękkiego odniesienia zwykle zależy od ilości pamięci w komputerze. Jeśli pamięć jest pełna, garbage collector najpierw zniszczy wszystkie słabe odniesienia. Kiedy wszystkie słabe referencje znikną, a pamięć nadal wymaga wyczyszczenia danych, miękkie referencje zostaną wyrzucone jako następne.