MokaByte 33  -  Settembre  1999
 
Il JDK 1.3
di 
Mauro Molino
Prova su strada del nuovo JDK fresco di fabbrica


Dopo alcuni rilasci intermedi, è venuto alla luce il JDK 1.3, che promette esaltanti miglioramenti per prestazioni e nuove possibilità di sviluppo. Diamogli un’occhiata più approfondita per scoprirne la reale portata

    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


  
 

MokaByte rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it