Java Singleton vs statico: esiste un reale vantaggio in termini di prestazioni?


Answers

Vorrei usare un singleton se avesse bisogno di memorizzare qualsiasi stato, e le classi statiche altrimenti. Non ha senso istanziare qualcosa, anche una singola istanza, a meno che non debba memorizzare qualcosa.

Question

Sto unendo un ramo CVS e una delle modifiche più grandi è la sostituzione ovunque si verifichi un pattern Singleton con classi astratte che hanno un blocco di inizializzazione statico e tutti i metodi statici.

È qualcosa che vale la pena di tenere, poiché richiederà la fusione di molti conflitti, che tipo di situazione dovrei considerare per far valere questo refactoring?

Stiamo eseguendo questa app su Weblogic 8.1 (così JDK 1.4.2)

scusa Thomas, fammi chiarire ..

la versione HEAD ha il tradizionale schema singleton (costruttore privato, getInstance () ecc.)

la versione del ramo non ha costruttore, è una "classe astratta pubblica" e ha modificato tutti i metodi sull'oggetto come "statici". Il codice che esisteva nel costruttore privato viene spostato in un blocco statico.

Quindi vengono modificati tutti gli usi della classe che causano più conflitti nell'unione.

Ci sono alcuni casi in cui questo cambiamento è stato fatto.




Questa discussione aiuta? (Non so se è tabù collegarsi a un altro forum di programmazione, ma preferirei non solo citare l'intera discussione =))

Sun Discussione su questo argomento

Il verdetto sembra essere che non fa abbastanza differenza da importare nella maggior parte dei casi, anche se tecnicamente i metodi statici sono più efficienti.




Se il mio post originale era la comprensione corretta e la discussione da Sun a cui è stato collegato è accurata (che penso possa essere), allora penso che si debba fare un compromesso tra chiarezza e prestazioni.

Porsi queste domande:

  1. L'oggetto Singleton rende più chiaro ciò che sto facendo?
  2. Ho bisogno di un oggetto per svolgere questa attività o è più adatto ai metodi statici?
  3. Ho bisogno delle prestazioni che posso ottenere non usando un Singleton?