In un'applicazione con un piccolo numero di POJO e molti metodi di supporto che operano su di essi, cosa c'è di meglio nelle prestazioni: rendere l'aiutante classi singleton o rendere i metodi statici?Metodi statici o Singletons dal punto di vista delle prestazioni (Android)?
risposta
metodi statici sarebbe molto leggermente migliori prestazioni e della memoria saggio:
- Evitare (potenziale) sovraccarico di chiamate di funzione virtuali.
- Elimina la memoria necessaria per un'istanza effettiva della classe.
- Elimina la necessità di ottenere un'istanza della classe quando la si utilizza.
Ma sinceramente probabilmente lo renderei comunque uno singleton
. I guadagni che otterresti non facendolo sono probabilmente così limitati da rendere zero la differenza, anche in un ambiente mobile.
È possibile evitare entrambe le situazioni e renderle regolari?
Ignorando la domanda relativa alle prestazioni, si consiglia di evitare singoli algoritmi e metodi statici per migliorare la testabilità.
Singleton e metodi statici possono essere molto difficili da testare; a questo proposito i singleton sono metodi essenzialmente statici ma con un nome diverso. Misko Hevery, che lavora sulla Google Test team, ha alcuni buoni articoli su questo argomento
Prendendo la tua domanda al valore nominale, le chiamate statiche probabilmente richiederà la minor quantità di potenza della cpu. Il motivo è che i metodi normali sono legati dinamicamente e richiedono una certa ricerca in fase di esecuzione mentre i metodi statici sono legati a un tempo di compilazione.
Detto questo, probabilmente non avrà importanza nella vostra applicazione. La differenza è davvero piccola. Se la tua applicazione fa qualsiasi cosa con gui, rendering xml, connessioni internet o altre manipolazioni esterne, scoprirai che queste attività rendono minima la semplice ricerca di Maths da un fattore enorme.
Anche se non lo si fa, durante la profilazione è più probabile che si verifichi un unico collo di bottiglia che sorregge la propria applicazione e si scopre che non è la ricerca del metodo, ma una logica che si è fatta da sé. Ad esempio hai usato un arraylist invece di un hashset e il metodo contiene risulta essere costoso.
Così come le prestazioni in questi casi non contano davvero, consiglierei di utilizzare le implementazioni dei singleton sopra i metodi statici in quanto il design è leggermente più flessibile. Anche se al di fuori delle scelte che hai offerto, lascerei cadere completamente le classi di supporto e incorporerò i metodi nel tuo pojo.
Non preoccuparti di micro-ottimizzazioni assurde come quella. Preoccuparsi della manutenibilità.
Sembra che l'applicazione sia scritta in uno stile totalmente non OO e potrebbe trarre molto vantaggio dall'eliminare la maggior parte di quei "metodi di supporto" e metterli a cui appartengono, con i dati su cui operano.
- 1. Quanto costa la creazione delle istanze CloudStorageAccount o CloudBlobClient dal punto di vista delle prestazioni?
- 2. ExpandoObject vs. Dizionario dal punto di vista delle prestazioni?
- 3. Facebook-connect o OpenID? Dal punto di vista dello sviluppatore
- 4. Metodi statici C# virtuali (o astratti)
- 5. metodi di estensione statici
- 6. metodi finali statici in enum
- 7. Punto di vista AspectJ per metodi PRIVATE annotati
- 8. Metodi statici di classe Python
- 9. Android programmato marginalmente il punto di vista
- 10. albero binario metodi statici in Java
- 11. Java - Metodi statici generici
- 12. PHP ottenere metodi statici
- 13. Metodi statici: quando e quando no
- 14. Cosa parla delle app a pagina singola dal punto di vista dell'esperienza utente?
- 15. Tracciamento GPS efficiente dal punto di vista energetico
- 16. Manomanti metodi 'statici' rispetto ai metodi 'istanza'
- 17. Vantaggi delle classi con solo metodi statici in C++
- 18. Inizializzatori statici e metodi statici in Java
- 19. Moduli ES6: Esportazione singola classe di metodi statici O più metodi individuali
- 20. Stile di codifica F #: metodi statici o istanza
- 21. Metodi in linea statici?
- 22. Concat un intero su una stringa: utilizza il letterale o primitivo String dal punto di vista delle prestazioni e della memoria?
- 23. Metodi statici in PHP
- 24. Metodi statici Python, perché?
- 25. Metodi statici nell'interfaccia java
- 26. F # Metodi statici privati
- 27. Codice di test unitario che chiama metodi statici
- 28. Come appaiono le stringhe dal punto di vista del compilatore?
- 29. Che cos'è fatwire dal punto di vista del programmatore?
- 30. Quando utilizzare classi e metodi statici?
Ok, allora JDK è scritto in stile non OO e con tutti i suoi Arrays.sort(), Long.valueOf(), ecc.;) – yanchenko
C'è una grande differenza tra avere un metodo statico qua e là, e avere l'intera app composta da nient'altro che oggetti di valore e tutta la logica in metodi statici (che potrebbe non essere proprio così, ma è così che l'hai fatta suonare) . –
@ Michael: ma Android ha davvero poca memoria. Sto prendendo in considerazione i tuoi consigli in questo post e un post su http://stackoverflow.com/questions/1284718/are-static-methods-good-for-scalability – Emerald214