 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
CarMas Guest
|
Posted: Tue May 16, 2006 11:07 am Post subject: Ottimizzazioni inutili? |
|
|
Chiedo un consiglio agli esperti!
Ho una parte di codice che normalmente e' fatta cosi':
RetType retValue = metodo( ... );
elabora(retValue);
considerato che e' all'interno di un ciclo for, che quindi lo invoca
molte volte, ho pensato di cambiarlo cosi':
RetType retValue=null;
for( .... ) {
retValue = metodo( ... );
elabora(retValue);
}
questa ottimizzazione ha senso? cioe', mi fa effettivamente risparmiare
dal punto di vista della "memoria occupata", mi evita allocazioni,
lavoro del gc, ecc?
Per ultimo, se cambio le due righe in questo modo:
elabora( metodo( ... ) );
cambia qualcosa o sotto succede come prima?
Grazie mille
CarMas |
|
| Back to top |
|
 |
Manuel T Guest
|
Posted: Tue May 16, 2006 1:07 pm Post subject: Re: Ottimizzazioni inutili? |
|
|
CarMas ha scritto:
| Quote: | cambia qualcosa o sotto succede come prima?
|
Tutto uguale, tanto è vero che spesso eclipse suggerisce di spezzare la
dichiarazione in due righe. |
|
| Back to top |
|
 |
Delvy Guest
|
Posted: Tue May 16, 2006 2:07 pm Post subject: Re: Ottimizzazioni inutili? |
|
|
Manuel T ha scritto:
| Quote: | CarMas ha scritto:
cambia qualcosa o sotto succede come prima?
Tutto uguale, tanto è vero che spesso eclipse suggerisce di spezzare la
dichiarazione in due righe.
|
Non cambia niente in quanto le due forme usate alla fine restituiscono
lo stesso identico bytecode.
A mio parere la forma estesa è più elegante e leggibile, poi è una
questione di gusti.
Delvy |
|
| Back to top |
|
 |
Claudio Nieder Guest
|
Posted: Tue May 16, 2006 6:07 pm Post subject: Re: Ottimizzazioni inutili? |
|
|
Hi,
in genere ottimizazioni di questo tipo semplice non valgono la pena,
perche le operazioni contenute nei tuoi metodi sono molto più complessi
di un semplice a=b;
| Quote: | dal punto di vista della "memoria occupata", mi evita allocazioni,
|
La memoria per la variabile "retValue" viene allocata una sola volta, a
meno che lo scrittore di javac non sia stato un'ultra-principiante.
La memoria per l'oggetto che viene passato da metodo() ad elabora() viene
allocato in metodo() ed e fuori controllo in questo punto. Li dipende, per
farti un esempio semplice, se hai una situazione tipo
class X() { Type metodo() { ... return new Type(somedata); } }
dove viene prodotto un nuovo Integer ogni volta, Oppure
class X() { Type t=new Type(); Type metodo() { t.set(somedata); return t; } }
dove use sempre la stessa instanza di t e cambi solo degli valori semplici.
| Quote: | elabora( metodo( ... ) );
cambia qualcosa o sotto succede come prima?
|
Semmai e più efficiente l'ultimo, perche cosi il risultato viene passato
direttamente alla funzione elabora. Però penso che i compilatori di oggi
siano in grado di trovare la stessa soluzione anche se usi le altre
varianti.
Per sapere se c'é differenze e se é abbastanza grande da giustificare
di pensarci su, misura il tempo:
long t0=System.currentMillis();
RetType retValue=null;
for( .... ) {
retValue = metodo( ... );
elabora(retValue);
}
t0=System.currentMillis()-t0;
System.out.println("Tempo impiegato="+t0+"ms");
Misure 3-4 volte questa variante e 3-4 volte la variante
elabora( metodo( ... ) );
e poi saprai se vale pensarci su o no.
claudio
--
Claudio Nieder, Kanalweg 1, CH-8610 Uster, Tel +41 79 357 6743
yahoo messenger: claudionieder aim: claudionieder icq:42315212
mailto:private (AT) claudio (DOT) ch http://www.claudio.ch |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|