| HOME PAGE | CONTATTI | COLLABORA | ASP | PHP | HTML | CSS | PERL | JAVA | TCP/IP | RETI | LINUX | MANUALI| SPAZIO WEB |
|
La programmazione in Java
Mentre il C e C++ affidano la gestione della memoria al programmatore, Java segue la direzione opposta, affidandola al sistema. Tale decisione scaturisce dal fatto che questa parte è fondamentale per la stesura di un buon software e che al momento rappresenta la più diffusa fonte di errore di programmazione per coloro che usano il C o il
C++.
L'elemento più significativo della gestione automatica della memori in Java è senza dubbio il garbage collector che si occupa di deallocare dalla memoria gli oggetti che non sono più utilizzati. Il garbage collector usa il multithreading: infatti viene gestito come un task a bassa priorità, che viene mandato in esecuzione nei tempi morti del programma, eliminando quegli oggetti che risultano inutilizzati. Anche in questo caso, si ripresenta la caratteristica di Java di semplificare le caose al programmmatore, a scapito delle potenzialità implementative. Infatti, se è vero che il programmatore qui non deve stare ad preoccuparsi della deallocazione della memoria inutilizzata, è anche vero, che perche avvenga questa operazione deve rimettesi alle modalità ed ai tempi di Java. In realtà, ciò, risulta un grave svantaggiosolo in quelle particolari situazioni in cui l'uso della memoria utilizzata è continuamente sfruttato al limite delle possibilità.
Per realizzare la neutralità dalla piattaforma del linguaggio gli sviluppatori di Java hanno diviso il passaggio dal codice ad alto livello a quello eseguibile in due momenti. In un primo momento il compilatore Java compila il sorgente in un codice intermedio detto bytecode. La Java Virtual Machine (JVM) si occupa di interpretare, in fase di esecuzione, il bytecode in codice eseguibile dalla particolare macchina su cui gira. In pratica è la JVM che rende Java un linguaggio multipiattaforma trasformando il codice intermedio in codice eseguibile dalla particolare macchina su cui si trova. Naturalmente il concetto di indipendenza dalla piattaforma per Java è legato alla presenza o meno di un'implementazione della JVM per una particolare piattaforma.
La Java Virtual Machine è una macchina che ha come codice eseguibile il bytecode. Il difetto più grande di questa soluzione è legato al fatto che la JVM è realizzata su ogni tipo di macchina a livello software cosa che si ripercuote sulle prestazioni che risultano di gran lunga infriori a quelle del C++; si noti infatti che l'utilizzao di una JVM a livello software corrisponde ad una interpretazione del meta-codice. Per migliorare le prestazioni di Java, Sun Microsystems ha realizzato una macchina Java a livello hardware.
Per quanto riguarda la robustezza Java limita la libertà dei programmatori in alcuni settori in modo da diminuire la probabilità di errori e favorire la loro individuazione nelle fasi iniziali della programmazione.
La sicurezza uno dei principi fondamentali nella progettazione di Java. Infatti Java garantisce una affidabilità strutturale in questo campo già con la fase di caricamento differenziato delle classi residente in rete. Queste ultime sono sottoposte ad una verifica contro modifiche dolose del codice. inoltre il bytecode può essere certificato
Java presenta ottimi parametri di sicurezza anche per la programmazione in rete, non solo con le applet, ma anche con la gestione delle risorse di rete contenuta nel package java.net . Infatti Java è in grado di interfacciarsi con le risorse di rete e di gestirle. Questo fa si che la sicurezza della connessione passi in mano a Java che permette di stabilire livelli di sicurezza negli accessi, oppure di riconoscere un determinato codice come sicuro, grazie ad una particolare tecnica di
crttiografia.
La programmazione multi-thread consiste nel dividere un programma in due o più processi che possono essere eseguiti in parallelo. Tali processi vengono chiamati thread, da cui il nome programmazione multi-thread. Per ognuno di questi il programmatore può stabilire una priorità, in modo tale che il processore dia la precedenza ai thread a priorità più alta rispetto a quelli a priorità più bassa. Questo tipo di programmazione può essere usato in molte situazioni, dalle animazioni alla lettura e scrittura dalla rete, ed in particolare in quelle operazioni che non impegnano eccessivamente la CPU. Naturalmente questo approccio è valido finché non crea all'utente fastidiosi ritardi.
Questo sistema sfrutta il fatto che molti thread (thread= processo leggero) di elaborazione spendono gran parte del loro tempo ad attendere la disponibilità di una risorsa o un'interruzione. Se si possono trasformare i propri task in thread di controllo indipendenti, e saltare automaticamente da un task che è in attesa ad uno che ha qualcosa da svolgere, allora si può compiere più lavoro nello stesso lasso di tempo. Ci sono poche probabilità che più di uno dei propri task richieda contemporaneamente l'uso della CPU per un tempo abbastanza esteso.Questo è quello che fa la programmazione multi-thread in Java, permettendo la realizzazione di programmi
mutlitasking.
|
|
|