Perché la Java Virtual Machine aiuta il tuo codice a funzionare meglio

Perché la Java Virtual Machine aiuta il tuo codice a funzionare meglio / Programmazione

Attualmente stai discutendo se utilizzare java per la tua prossima applicazione o utilizzare toolkit e framework nativi? Volete sapere quali sono i vantaggi offerti da java sulla programmazione nativa per un'applicazione? Continuate a leggere per scoprirlo!

Cos'è un'applicazione nativa?

Un'applicazione nativa è un programma scritto specificamente per un sistema operativo (OS) e, eventualmente, per l'hardware specifico su cui è in esecuzione quel SO. È scritto principalmente in un linguaggio come C / C ++. Il codice sorgente C / C ++ viene compilato in un modulo oggetto utilizzando un compilatore, che viene quindi assemblato in un eseguibile collegando le librerie richieste. Un programma creato in questo modo verrà eseguito sull'hardware e sul sistema operativo specifico per cui è stato progettato, ma potrebbe non funzionare correttamente su altri sistemi.

Perché le applicazioni native non sono portatili?

Un compilatore per un linguaggio come C / C ++ traduce le istruzioni del codice sorgente in linguaggio macchina per la CPU di destinazione. Quando si tenta di eseguire questo codice su una CPU diversa, il programma potrebbe non funzionare correttamente (o funzionare affatto) poiché le istruzioni del linguaggio macchina nel codice compilato potrebbero non essere supportate da questa CPU.

Inoltre, il nuovo sistema operativo potrebbe essere diverso da quello originale e potrebbe anche non riconoscere il file di programma come un eseguibile. Ciò è dovuto ai diversi formati di file utilizzati per i file eseguibili su diversi sistemi operativi (come Windows, Linux, MacOS, ecc.).

La portabilità è un problema talmente grande con le applicazioni native che semplicemente aggiornando il compilatore alla prossima versione potrebbe introdurre cambiamenti improvvisi. Potrebbe essere necessario correggere il codice per lavorare con il compilatore più recente. Come tale, splattering il codice sorgente con ciò che è noto come ifdef le istruzioni per isolare soluzioni alternative per hardware, sistema operativo o compilatore sono comuni.

Quello che segue è un piccolo frammento di codice dalla libreria di compressione BZLib che illustra l'uso di ifdefs per isolare le peculiarità della piattaforma:

#ifdef _WIN32 # include  # ifdef small / * windows.h definisci small in char * / # undef small # endif # ifdef BZ_EXPORT # define BZ_API (func) WINAPI func # define BZ_EXTERN extern # else / * importa windows dll dinamicamente * / # define BZ_API (func) (Funzione WINAPI * # definire BZ_EXTERN # endif #else # define BZ_API (func) func # define BZ_EXTERN extern #endif 

Portabilità del codice sorgente attraverso i sistemi operativi

Questa situazione può essere alleviata in una certa misura ricompilando il codice sorgente C / C ++ nella nuova CPU. Tuttavia, il sistema operativo per la nuova CPU potrebbe essere diverso. E il codice sorgente potrebbe non essere compilato senza modifiche, siano esse maggiori o minori. Anche piccoli cambiamenti nelle versioni del sistema operativo possono richiedere alcune modifiche al codice sorgente.

E quando si considerano sistemi operativi dissimili come Windows e Linux / UNIX, la portabilità è un gioco completamente nuovo. A meno che non si stia utilizzando un toolkit o un framework che ti isola completamente dal sistema operativo, la portabilità del codice sorgente è impossibile. Questo perché l'interfaccia del sistema operativo è completamente diversa tra questi sistemi. Se tu, negli angoli più remoti del tuo codice, usi direttamente qualsiasi primitiva del sistema operativo, allora il tuo codice non sarà trasferibile su questi diversi sistemi operativi.

Come è Java diverso?

È in questo scenario che java offre un nuovo paradigma, un nuovo modo di costruire software. Quando si programma in java, si targetizza a macchina virtuale. Tale macchina esiste come concetto e il linguaggio java fornisce interfacce per la programmazione contro questa macchina. Ad esempio, è possibile interrogare la quantità di memoria disponibile, il numero di CPU, le interfacce di rete, ecc. Della macchina virtuale.

Come vengono create le applicazioni Java?

Il linguaggio java fornisce un compilatore Java che traduce il codice sorgente in codice oggetto. Il codice oggetto viene quindi eseguito dal macchina virtuale Java, che è un programma separato dal compilatore. Il sistema operativo, a sua volta, visualizza la macchina virtuale java come un altro programma in esecuzione su quel SO.

L'onere della portabilità è ora spostato dal programmatore dell'applicazione al fornitore di macchine virtuali Java. Il programmatore dell'applicazione scrive il software utilizzando i primitivi del linguaggio java e la macchina virtuale java è responsabile della traduzione di queste primitive nelle strutture del sistema operativo host. Quando esce una nuova versione del sistema operativo, è responsabilità del venditore aggiornare la macchina virtuale java affinché funzioni correttamente sul nuovo sistema operativo.

Quali sono i vantaggi della Java Virtual Machine?

Come accennato in precedenza, la macchina virtuale java fornisce una vista virtuale del sistema operativo e dell'hardware al programmatore dell'applicazione. Questa visualizzazione virtuale ha la forma di varie interfacce e metodi e serve a isolare il programmatore dell'applicazione dalle differenze nel sistema operativo host e nell'hardware sottostante. Pertanto, il programmatore di applicazioni può accedere a strutture come un Windowing Toolkit, Networking, grafica 3D, più CPU, ecc. Senza dover ricorrere a chiamate di basso livello che rendono il programma non portatile.

Un programma java è scritto ed è compilato usando il compilatore java. Il codice oggetto risultante (chiamato codice byte) può essere trasportato su un diverso sistema operativo host in esecuzione su hardware diverso e dovrebbe funzionare senza problemi.

Compilatore JIT

La macchina virtuale java utilizza a Compilatore JIT per ottimizzare il codice byte in modo specifico per la CPU di destinazione. JIT sta per Appena in tempo e fa riferimento alle ottimizzazioni di runtime che la JVM applica al codice byte per farlo funzionare meglio sulla CPU corrente.

Un altro vantaggio dell'utilizzo della Java Virtual Machine è che può applicare diverse ottimizzazioni per diversi casi d'uso, tutte con lo stesso codice byte. Ad esempio, Oracle JVM offre due opzioni per l'esecuzione del codice byte: una modalità server e una modalità client. La modalità server viene ottimizzata per i programmi server con esecuzione prolungata, mentre la modalità JVM client ottimizza i tempi di risposta rapidi poiché è probabile che venga utilizzata in modalità interattiva.

Per riassumere, un'applicazione nativa è costruita per un hardware e un sistema operativo specifici. Un'applicazione java, d'altra parte, segue a Build Once Run Anywhere filosofia, avendo una JVM eseguire le istruzioni del codice byte compilato. Sebbene le applicazioni native siano state tradizionalmente considerate più performanti rispetto alle applicazioni Java, potrebbe non essere sempre vera a causa dell'uso di un compilatore JIT da parte della JVM.

Hai sviluppato un'applicazione nativa e hai dovuto passare a java a causa della portabilità? O viceversa a causa di problemi di prestazioni? Fateci sapere nei commenti qui sotto.

Credito immagine: Profit_Image tramite Shutterstock.com

Scopri di più su: Java.