Newsgroup: it.comp.java
Titolo: Ottimizzazione codice

Ciao a tutti,
mi stavo chiedendo se qualcuno di voi conosce delle risorse (link, libri,
ecc.) per ottimizzare codice Java.
Per ottimizzazioni intendo cose del tipo utilizzare lo shifting per fare
operazioni matematiche, ecc.
Non vorrei mettermi dietro a scoprire l'acqua calda facendo prove su
prove, piu' che altro avere un punto di partenza per sperimentare.
Il mio dubbio e' che le ottimizzazioni possano dipendere dalle
implementazioni delle JVM.
Voi che dite?
Ciao,
Eddy
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Voi che dite?
Che il codice "ottimizzato" e' molto spesso illeggibile, ed il guadagno
e' nullo. Io preferisco codice non ottimizzato ma piu' leggibile
(e mantenibile) a prezzo di un minimo degrado delle prestazione.
Certo che se il 'degrado' comincia a diventare apprezzabile...
Davide

 Certo che se il 'degrado' comincia a diventare apprezzabile...
Sono consapevole che le ottimizzazioni vadano a scapito della
leggibilita', pero' sono convito che su grandi applicazioni sia possibile
avere dei margini di prestazioni superiori a codice "piu' leggibile".
Mi e' tornato in mente, ad esempio, che la VM upcasta i data type numerici
short e byte ad intero quando deve fare le operazioni e poi li downcasta
di nuovo a short e byte.
Anche il fatto di utilizzare la forma i += 1 ho letto da qualche parte che
e' piu' ottimizzante rispetto a fare i = i + 1.
Insomma, tutto l'insieme di queste forma di codifica avranno dei benefici.


 avere dei margini di prestazioni superiori a codice "piu' leggibile".
Di solito le ottimizzazioni adottabili in java vanno a braccetto con il buon
senso e l'esperienza "ottimizzatoria" acquisita con altri linguaggi come C,
pascal, etc. E' ovvio che esistano ottimizzazioni java-specific come quelle
che hai citato, che possono influire in alcuni circoscritti casi. Poi
esistono ottimizzazioni application-specific, ma su quelle lascio a te
l'onore..
Il consiglio per ottenere un buon compromesso tra leggibilita' e velocita'
e' di trovare gli "hotspot" del codice a runtime tramite un profiler ed
agire solo in quei punti.
Qualche doc : 
http://www-2.cs.cmu.edu/~jch/java/optimization.html
Ciao,
Mik
--

innanzitutto usa il jdk 1.4.0_01 o aspetta la finale del
jdk 1.4.1 (al momento in beta).
poi c'e' un libro online scritto da un ingegnere della sun:
http://java.sun.com/docs/books/performance/
il tizio suddetto frequenta il forum a 
http://www.javagaming.org
(il sito e' rivolto a chi crea videogiochi, ma sono spesso
affrontate tematiche di ottimizzazione utilizzabili anche
in programmi che non sono giochi)
dovresti usare un profiler come optimize it (
www.borland.com
)
oppure jprobe (
www.sitraka.com
). puoi scaricare le versioni
trial e chiedere delle licenze di valutazione tipo 30 giorni.
altri link: 
http://www.javaperformancetuning.com/
http://www.onjava.com/pub/ct/26
http://www-2.cs.cmu.edu/~jch/java/speed.html
poi ci sono i bytecode optimizer: programmi che cambiano il
bytecode dei .class e li ottimizzano. ho provato molto tempo
fa il dasho ma ho avuto risultati contrastanti: in alcuni casi
la velocita' aumentava ed in altri diminuiva...
comunque e' possibile che versioni piu' recenti siano migliori.
http://www.preemptive.com/DashO/index.html
http://www-i2.informatik.rwth-aachen.de/~markusj/jopt/index.html
ciao!
 

 ciao!
Dire che sei stato esauriente e' poco!
Grazie mille, penso che ne avro' da leggere per un bel po'!
Ciao,


 comunque e' possibile che versioni piu' recenti siano migliori.
Il semplice uso di un obfuscator funge allo scopo: la ricerca di una classe
o di un metodo in una classe è assai costosa, e gli obfuscator riducono
moltissimo la lunghezza dei nomi.
Inoltre, esistono, a costo di perdere la portabilità del compilato(ma non
sul sorgente) compilatori di sorgente e di bytecode in codice oggetto
specifico; io per esempio uso JET, vedi 
www.excelsior-usa.com
 per Windows;
su Linux c'è gcj, cioè gcc per java che compila anche in formato eseguibile
standard, anche se la libreria inclusa è quella del Jdk1.1(quindi niente
swing); non so se si potrebbe usare con una libreria + recente, perché
bisognerebbe che linkasse con i metodi nativi del Jre, e non so se lo fa.
Ciao
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.