| di Donato Cappetta |
|
||||||
La
soluzione proposta si basa sul JDK1.1 ed è pienamente compatibile
con esso. Al momento della scrittura dell'articolo è disponibile
la versione 1.1.3 del JRE e del JPP che sono scaricabili separatamente
dal sito della Sun http://java.sun.com/products/jdk/1.1.
L'installazione dei due pacchetti deve essere effettuata separatamente
per cui essi saranno analizzati separatamente.
Il
Java Runtime Environment
Il JRE è disponibile oltre che per la piattaforma Win32 (Windows 95 e Windows NT 4.0, non è stato testato su Windows NT 3.51) anche per Solaris. Il JRE per Win32 (jre113.exe) è disponibile in due versioni:
HKEY_LOCAL_MACHINE\Software\JavaSoft\RunTime Environment\1.1\JavaHome
viene impostata in installazione con il path
specificato.
In fase di esecuzione del JRE le classi e
le DLL standard di Java vengono caricate rispettivamente dalla directory
lib
(file rt.jar)e
dalla directory bin,
a partire dal path specificato nella chiave JavaHome.In
fase di installazione del JRE non vengono modificati altri parametri (non
viene modificato l'Autoexec.bat né vengono settate variabili di
ambiente).
Una copia dei file eseguibili (sono due:
jre.exe
e jrew.exe) viene
installata automaticamente anche nella directory di Windows in modo che
essi possono essere immediatamente richiamati essendo la directory di Windows
inclusa per default nel path dei comandi.
Terminata l'installazione, l'interprete JRE
può essere invocato dal prompt dei comandi usando il tool jre
(o jrew), esso ignorerà la variabile di ambiente CLASSPATH
(se definita). La Sun Microsystems raccomanda l'uso dell'opzione -cp per
specificare il path delle classi dell'applicazione.
La sintassi del comando jre è
la seguente:
Le opzioni ([opzioni])più significative sono:
Il comando jrew è analogo a jre, eccetto che jrew non è associato ad una console window. Si può usare jrew quando non si vuole che appaia il prompt dei comandi durante l'esecuzione delle applicazioni Java. Questo comando è utilizzabile per applicazioni con interfaccia grafica (in pratica applicazioni che fanno uso del package java.awt) in quanto i messaggi diretti allo standard output non vengono visualizzati, così come non vengono visualizzati i messaggi di errore generati dall'interprete. Con jrew è possibile, per esempio, creare un collegamento all'applicazione Java dal desktop di Windows. Specificando che deve essere invocato il comando jrew.exe e settando l'eventuale classpath (-cp), con un doppio click sull'icona creata va in esecuzione l'applicazione Java (con interfaccia grafica) senza che nessuna finestra supplementare venga aperta.
Il
Java Performance Pack
Il JPP è disponibile solo per la piattaforma
Win32. Esso fornisce un compilatore Jist In Time1
(JIT) al JRE ma è possibile usarlo anche con il JDK 1.1.3! La Sun
Microsystems dichiara un incremento di prestazioni, durante l'esecuzione
di applet o applicazioni, di un fattore 10. La Sun precisa anche di non
usare questo JIT per applicazioni mission-critical essendo questa tecnologia
una versione preview.
Il file jpp113.exe, che si scarica dal sito
web JavaSoft, è di ~800 kByte e si installa con estrema facilità.
Prerequisito per l'installazione è che sulla propria macchina sia
già installato il JRE 1.1.3 o il JDK 1.1.3. Accertato ciò,
con un doppio click sul jpp113.exe va in esecuzione l'installazione, quasi
trasparente, non essendoci nessun parametro da impostare. Terminata l'installazione
il compilatore JIT (si tratta del file symcjit.dll) può essere usanto
con il JRE o con il JDK.
Visto che lo scopo del Java Performance Runtime
è di distribuire applicazioni Java può essere interessante
analizzare come si comporta in termini di prestazioni; soprattutto per
la presenza del compilatore JIT, perciò si vanno adesso ad eseguire
alcuni test.
Si precisa che questi test vogliono dare
solo un'idea generale delle prestazioni del JIT ma non sono assolutamente
da considerarsi completi né tantomeno esaustivi!
Il confronto viene fatto in termini di tempo
tra l'interprete java.exe (senza compilatore JIT) del JDK e l'interprete
jre.exe con compilatore JIT.
I test vengono eseguiti considerando,per
comodità e semplicità, i seguenti algoritmi: di ricorsione,
di iterazione e di allocazione. Si precisa nuovamente che il test non è
affatto da ritenersi rigoroso! Difficilmente i programmi reali si possono
classificare così schematicamente.
|
|
(con JIT) |
(senza JIT) |
java/jre |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nell'ultima colonna della tabella viene riportato anche il rapporto tra i due tempi, in media l'interprete jre.exe è stato 7.4 volte più veloce dell'interprete java.exe.
|
da ordinare |
(con JIT) |
(senza JIT) |
java/jre |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In media l'interprete jre.exe è stato 10 volte più veloce dell'interprete java.exe.
|
da allocare |
(con JIT) |
(senza JIT) |
java/jre |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In media l'interprete jre.exe è stato 2 volte più veloce dell'interprete java.exe.
Quest'ultimo test dimostra che il compilatore
JIT non è sempre performante. Del resto il risultato era prevedibile
essendo la rappresentazione (runtime) degli oggetti in Java abbastanza
complessa, per cui, in caso di allocazione, il compilatore JIT migliora
relativamente le prestazioni.
Va comunque rilevato che quest'ultimo
test è stato eseguito considerando un numero di allocazioni elevato
(ordine 105) e i tempi sono di tutto rispetto, con e senza JIT.
In generale si può affermare che il
compilatore JIT si è "comportato" bene.
Naturalmente per un giudizio complessivo
occorrono test del tutto generali e più rigorosi.
I test sono stati eseguiti su un PC Pentium
133.
Conclusione
Spesso sulla mailing list java-it c'erano
richieste di come distribuire le applicazioni Java, e quali file del JDK
erano indispensabili. Il Java Performance Runtime risolve completamente
il problema.
Adesso è disponibile per la piattaforma
Windows (il JRE anche per Solaris), ma è probabile che in futuro
saranno disponibili le versioni per le piattaforme più diffuse.
L'installazione non presenta problemi, l'occupazione di spazio è
ridotta, e il compilatore JIT fa la sua parte migliorando le prestazioni.
Comodo è anche il tool jrew che consente di configurare l'esecuzione
di una applicazione Java con il semplice click del mouse (creando un collegamento
dal menu di Windows), rendendo, così, del tutto trasparente la presenza
della macchina virtuale Java.
(1) L'interprete Java, per ciascun bytecode, elobora una sequenza di istruzioni in codice nativo per la CPU hardware che sta utilizzando. Se si salva una copia di ciascuna istruzione binaria (codice nativo)così come viene eseguita, la volta successiva che lo stesso codice deve essere interpretato si può eseguire direttamente il codice binario memorizzato in precedenza, senza doverlo interpretare nuovamente, ottenendo così un notevole incremento di prestazioni. Questo processo è noto come "traduzione dinamica". La Sun lo ha chiamato "compilazione in tempo reale" (Just In Time).