2013-03-02 12 views

Odpowiedz

1

Jedynym powodem GC będzie dealocate instancji jest, jeśli cała aplikacja jest zniszczony ...

+1

Gdy cała aplikacja zostanie zniszczona, GC również zostanie zniszczony. –

+1

To jest oczywiście fałszywe: Weź pod uwagę: 'static {new Object(); } 'To jest singleton i jest to śmieci zbierane natychmiast. –

3

Wywóz śmieci zbiera przedmioty, które nic nie jest skierowany do, chyba że odwołanie jest statyczny. Are static fields open for garbage collection?

+1

W języku Java nie ma czegoś takiego jak "obiekt statyczny". –

+0

Struktura obiektu nie może być zadeklarowana jako statyczna, ale możesz mieć statyczne odwołanie/instancję tego obiektu. Odpowiedź edytowana, aby powiedzieć referencję. – Shellum

+0

Tak! Myślę jednak, że można po prostu pominąć całość w statycznych odnośnikach. Twoja odpowiedź jest kompletna i poprawna, przy przecinku! –

1

Istnieje wiele sposobów wdrożenia Singleton. Jednym z najlepszych jest:

public static enum My { SINGLETON; } 

To, czy coś jest singletonem, nie ma wpływu na to, czy jest GCed czy nie. Obiekt będzie GCed, jeśli nie ma silnych odniesień do niego. Sprawdź to (http://weblogs.java.net/blog/2006/05/04/understanding-weak-references).

Jest jeszcze jeden problem, który jest przedmiotem zainteresowania. W Androidzie Twoja aplikacja nie kontroluje cyklu życia. Możliwe, że proces zostanie przerwany i ponownie utworzony w sposób, jakiego się nie spodziewasz. Jeśli tak się stanie, statyczne zmienne końcowe zostaną ponownie zainicjowane. Jest więcej na ten temat tutaj:

http://portabledroid.wordpress.com/2012/05/04/singletons-in-android/

Powiązane problemy