Introduzione
Jdk1.2, Java
2 .Java SDK 2.
Tranquilli,
non siete gli unici ad essersi persi nella pletora di sigle coniate dalla
Sun per dare nome all’ultima piattaforma Java sfornata. In realtà
tutti e tre i nomi identificano la stessa cosa, ma si è voluto sottolineare
il fatto che la nuova versione di Java non è soltanto un rimaneggiamento
delle precedenti ma una vera e propria “riscrittura”.
Non che ci siano
stravolgimenti tali da mettersi a piangere dall’emozione, però le
variazioni sono numerose, parti importanti del JDK sono state completamente
riscritte e meccanismi delicati come il garbage collector sono stati ottimizzati.
E fin qui ci
siamo.
Poi compaiono
JDK1.2.1 e JDK1.2.2. Bene, tutto regolare, solite piccole modifiche e correzioni.
E poi fu JDK1.3
………...
JDK 1.3
Intanto a rigor
di logica dovrebbe essere possibile chiamarlo Java 3 o Java SDK 3. Niente
di tutto questo. Va beh, ancora una volta non ho capito niente delle attribuzioni
di nomi.
Poco male, il
fatto non ci interessa più di tanto. Quello che è veramente
interessante è la reale portata delle modifiche ed aggiunte apportate
al JDK. Vediamone una carrellata, che sarà necessariamente non esaustiva.
Per curiosità
andate a vedere la lista completa delle variazioni, vi darà un’idea
del lavoro che è stato fatto. Ad esempio sono state aggiunte
diverse API prima presenti come estensioni al JDK, in particolare JNDI
( Java Naming and Directory Interface), che rappresenta una interfaccia
unificata per l’accesso tramite Java a tutti i servizi detti “directory
services”, come DNS e LDAP. Altra introduzione di un certo rilievo è
la Java Sound API. Quest’ultima, rispetto al Media Framework rappresenta
un tool in grado di soddisfare i palati piu’ esigenti per ciò che
riguarda la manipolazione del suono sia in formato audio, sia in formato
MIDI. Non conosco i motivi che abbiano spinto all’integrazione di questa
API dato che, almeno in apparenza, sembrerebbe uno strumento “per cultori
del genere”, però, facendo parte del citato gruppo, la cosa non
può che farmi piacere, anche perché avendo testato a fondo
la Java Sound ne ho ricavato un giudizio più che favorevole.
Questa API permette
di sviluppare veri e propri “sequencer” musicali, con tutta una serie di
controlli sia sulla gestione sia sulla generazione del suono.
Per quanto riguarda
il “networking”, adesso è possibile utilizzare i socket TCP “mezzo
chiusi”. In pratica, attraverso i metodi shutdownInput() e shutdownOutput()
è possibile rendere la comunicazione unidirezionale. La modifica
è passata un po’ in sordina, mentre personalmente ritengo si tratti
di una possibilità estremamente interessante ( tecnologie push,
sicurezza, etc.).
Inoltre è
stato aggiunto il supporto per HTTP1.1
Una cosa curiosa.
Nella libreria matematica, la classe BigInteger è stata reimplementata
direttamente e completamente in Java, e risulta ora circa cinque volte
più veloce della precedente versione basata su una libreria in C
!!!!
Dal lato grafico,
numerose modifiche sono state apportate alla Java 2D e a Swing, oltre ad
una serie di reimplementazioni tese a migliorare la velocità dell’interfaccia.
La API di “Security” è stata farcita di tutta una serie di nuovi
metodi, classi e interfacce e idem per la Accessibility API. E così
via per tutta una serie di aggiunte minori.
JAVA 2 Client
VM
Non è
tutto. Forse la cosa più appetitosa può essere considerata
l’integrazione nel JDK della “JAVA 2 Client Virtual Machine”, altro modo
per dire che alla VM è stato aggiunto HotSpot in versione ottimizzata
per il lato client. Le versioni di HotSpot rilasciate finora infatti, sembravano,
e Sun stessa lo confermava, più adatte per l’ottimizzazione lato
server, poiché in grado di esternare la loro massima potenza solo
dopo un certo periodo di attività dell’applicazione, a causa della
compilazione che viene eseguita a run-time. Nella versione implementata
nel jdk 1.3, pare invece che si sia puntato ad avere un “performance engine”
in grado di apportare significativi miglioramenti nella velocità
di esecuzione del programma sin dalla sua partenza. Le prove fatte confermano
questa linea, e gli effetti sono immediatamente apprezzabili (vedi più
avanti nell’articolo). In particolare si sono approcciati miglioramenti
sulla fase di start-up, sulla velocità di esecuzione e sull’occupazione
di memoria.
Altre modifiche
Anche gli strumenti
di lavoro del jdk hanno subito numerose modifiche, a partire dal compilatore
javac, che è stato totalmente reimplementato per renderlo più
veloce. Non supporta più le opzioni non standard del precedente
compilatore, che comunque è ancora presente con il nome di oldjavac.
Praticamente anche tutte le altre utility del jdk sono state ritoccate
o reimplementate, per renderle più flessibili e stabili.
Abbiamo dato
solo una panoramica di massima sull’enorme lavoro svolto per il rilascio
di questa nuova versione del jdk, ma alla fine tutte queste modifiche hanno
apportato reali miglioramenti o no ? Vediamo nel piccolo quali risultati
ho ottenuto.
Prove in pista
Sulla mailing-list
JAVA-IT è stato postato un messaggio che riportava le dichiarazioni
di uno sviluppatore della NetBeans, la casa produttrice dell’omonimo IDE
per Java, scritto in Java. Lo sviluppatore affermava di aver testato la
loro ultima release del prodotto con il jdk1.2 e poi con il jdk1.3, e nel
secondo caso aveva rilevato un aumento delle prestazioni da due a tre volte,
affermando di non notare differenze di prestazioni tra la versione Java
ed una sua versione nativa. La cosa mi ha fatto brillare negli occhi una
luce di rivalsa (tipica dei cartoni animati giapponesi); già pensavo
a tutte le volte che qualcuno mi aveva detto con aria saccente e inquisitoria:
“ si, Java è un bel linguaggio, ma le prestazioni sono veramente
inaccettabili!!”, e io li a spiegargli che molto dipende da come il codice
viene sviluppato, e che poi non sempre le prestazioni sono così
importanti, e via dicendo, quasi indignato da una tale affermazione, sempre
però con quel minimo di coda di paglia di chi in cuor suo sa di
non poter sfoggiare una difesa inattaccabile. Forse era giunto il momento
di dire: “OK, abbiamo scherzato, ma ora non ce n’è più per
nessuno. Java è indiscutibilmente il miglior linguaggio disponibile
sotto tutti i punti di vista, ANCHE PER PRESTAZIONI !!”. Ho scaricato i
miei bei 24 MB di jdk . Grazie all’eccitazione (e alla linea ISDN, che
sia benedetta) , non mi sono neanche accorto di aver scaricato una così
ragguardevole mole di dati. Installo il tutto e comincio a fare qualche
prova con i demo delle jfc allegati al JDK stesso. Ho provato subito il
SwingSet, quello per intenderci che contiene dimostrazioni di tutte le
classi Swing. Sul mio Celeron 300 Mhz, 64 Mb di memoria ha caricato in
circa 20 secondi, contro gli oltre 30 necessari con il jdk1.2.2 . La cosa
non mi ha sconvolto, mi aspettavo di meglio. Comincio a navigare fra le
tab dell’applicazione e qui ho avuto la sorpresa. Il passagio da una tab
all’altra, con l’aggiornamento della grafica interna alla tab è
pressochè istantaneo. Non ero sicuro, ma mi pareva di ricordare
che la stessa con non fosse vera per il jdk1.2.2 . Faccio il tentativo
con il vecchio jdk: era proprio come ricordavo. Faccio notare che
anche con il jdk precedente la prova era stata condotta utilizzando HotSpot
1.0.1 , quindi a parità di condizioni. Ho rifatto la prova diverse
volte con i due jdk, per eliminare qualsiasi variabile di distorsione sull’esperimento,
ed ho avuto sempre lo stesso risultato: le prestazioni del jdk1.3 sono
nettamente superiori a quelle dei suoi predecessori. Ricordandomi della
mail dello sviluppatore della NetBeans, ho voluto provare il nuovo giocattolo
anche con l’ultima versione del loro IDE. Stessa dinamica, stessi risultati.
L’unico problema che ho riscontrato in quel caso è stata un fastidioso
bug nella visualizzazione dei tooltip sulla paletta dei Bean, ma non sono
in grado di dire se il problema sia del jdk o dell’IDE, anche se, provando
jdk1,3 con altri programmi, i tooltip funzionano regolarmente. Comunque,
per tutti i programmi testati, sia che fossero orientati all’I/O, alla
grafica, al calcolo intensivo o al networking, la musica non è cambiata.
Pare che l’aumento di prestazioni sia applicabile a tutti gli ambiti di
sviluppo.
Conclusioni
Senza sbandieramenti,
rulli di tamburo e fanfare assordanti, questo nuovo jdk probabilmente rappresenta
un reale miglioramento della piattaforma Java 2. L’impressione è
che il salto di qualità che si è fatto con questa versione,
superi addirittura quello fatto nel passaggio dal jdk 1.x al jdk 1.2 .Non
ho avuto modo di testare a fondo la stabilità del sistema in condizioni
critiche, ma su tutti i programmi provati non ho riscontrato problemi e
le prestazioni ripeto, rallegrano il cuore di noi Java-dipendenti. Tra
l’altro in questo articolo non sono citate tutte le nuove caratteristiche,
perché la cosa sarebbe stata lunga e pesante, ma basta dare un’occhiata
su www.javasoft.com per avere un’idea della reale portata del nuovo rilascio.
Il tutto fa ben sperare. Aspettiamo con fiducia……………..
Bibliografia
http://java.sun.com/products/jdk/1.3/docs/relnotes/features.html-JavaTM
2 SDK, Standard Edition, version 1.3 Summary of New Features and Enhancements
.