2013-03-02 9 views

risposta

1

Il motivo unico GC dealocate l'istanza è che se l'intera applicazione è distrutta ...

+1

Quando l'intera app viene distrutta, anche il GC verrebbe distrutto .. –

+1

Questo è chiaramente falso: Considerare: 'static {new Object(); } 'Questo è un singleton ed è garbage collection istantaneamente. –

3

Garbage Collection raccoglie oggetti che nulla è indicò, a meno che un punto di riferimento è statico. Are static fields open for garbage collection?

+1

Non esiste una cosa simile, in Java, come "oggetto statico". –

+0

La struttura di un oggetto non può essere dichiarata statica, ma è possibile avere un riferimento statico/istanza di esso. Rispondi modificato per dire riferimento. – Shellum

+0

Sì! Penso, però, che si possa tralasciare tutto ciò che riguarda i riferimenti statici. La tua risposta è completa e corretta, alla virgola! –

1

Ci sono molti modi per implementare un Singleton. Uno dei migliori è:

public static enum My { SINGLETON; } 

o meno qualcosa è un Singleton ha alcuna incidenza sulla se è GCed o no. Un oggetto sarà GCed se non ci sono riferimenti forti ad esso. Cercalo (http://weblogs.java.net/blog/2006/05/04/understanding-weak-references).

C'è un altro problema che interessa. In Android, l'applicazione non controlla il suo ciclo di vita. È possibile che un processo venga terminato e ricreato in modi che non ti aspetti. Se ciò accade, le variabili finali statiche verranno reinizializzate. C'è di più su questo qui:

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