Cos'è la Java Virtual Machine e come funziona?
Java Virtual Machine (JVM) è un dropper di nomi reali quando si programma in Java. Contrariamente a ciò che indica il nome, la Java Virtual Machine può essere rilevata anche in relazione ad altri linguaggi di programmazione.
In generale, non è necessario sapere cosa sia la Java Virtual Machine, o anche cosa faccia, essere in grado di programmare in Java. D'altra parte, familiarizzare con il funzionamento interno di una macchina aiuta ad aumentare la comprensione e l'intuizione complessiva.
Questo articolo rispecchia l'idea di Java Virtual Machine, cosa fa per te e alcuni dei pro e contro più importanti. Anche se ho cercato di mantenerlo semplice, e c'è sicuramente una letteratura più avanzata sull'argomento, è attesa una comprensione rudimentale di Java e della programmazione.
Lingue di alto livello
La semantica di un linguaggio di programmazione è progettata per essere vicina al nostro linguaggio naturale, pur restando concisa e facile da interpretare per una macchina. Come probabilmente saprai, il linguaggio di programmazione è completamente diverso dal codice macchina, l'insieme di istruzioni che un computer usa per costruire ed eseguire un programma. Questo lo chiamiamo lingue di alto livello; uno o più livelli di astrazione dal codice macchina.
Prima di poter eseguire, il codice di alto livello deve essere prima interpretato. Molte interfacce di programmazione compilano in anticipo (Compilazione AOT) per una piattaforma specifica. Ciò rende il programma più efficiente in fase di runtime, ma molto meno compatibile con piattaforme diverse. Java, al contrario, funziona con un linguaggio intermedio chiamato Bytecode Java e il macchina virtuale Java.
Bytecode JVM e Java
Quando il tuo progetto Java si costruisce, traduce il codice sorgente (contenuto in *.Giava file sorgente) in bytecode Java (il più delle volte contenuto in file * .class). In questo modo il tuo codice di alto livello si avvicina di un passo al codice della macchina, ma non ancora del tutto. Questo bytecode è una raccolta di istruzioni compatte; più facile da interpretare per una macchina, ma meno leggibile.
Quando si esegue un'applicazione Java sul computer, sul cellulare o su qualsiasi altra piattaforma abilitata per Java, si passa essenzialmente questo bytecode Java alla Java Virtual Machine. L'interprete nella Java Virtual Machine di solito avvia la compilazione dell'intero bytecode in fase di runtime, seguendo i principi del cosiddetto compilazione just-in-time. Questo rende il tipico, anche se spesso lieve ritardo durante l'apertura di un'applicazione Java, ma generalmente migliora le prestazioni del programma rispetto a compilazione interpretata.
Il vantaggio principale di questo sistema è la maggiore compatibilità. Poiché le applicazioni vengono eseguite su una macchina virtuale anziché direttamente sull'hardware, lo sviluppatore può programmare e creare una volta la propria applicazione, che può quindi essere eseguita su ogni dispositivo con un'implementazione della Java Virtual Machine. Questo principio ha dato origine allo slogan di Java: “Scrivi una volta, corri ovunque.”
Pro: compatibilità e sicurezza aumentata
Oltre alla compatibilità del codice, la Java Virtual Machine offre altri vantaggi. Uno dei più importanti è la sicurezza relativa dei programmi Java come risultato della Java Virtual Machine. Sicurezza, il che significa che un programma in esecuzione in una macchina virtuale ha molte meno probabilità di interrompere il sistema operativo dell'utente, o di corrompere i file di dati, se si verificano errori.
Con: Diverse implementazioni JVM e debugging
Una delle principali critiche espresse contro la compatibilità del codice e la Java Virtual Machine è dovuta alle molte e diverse implementazioni di quest'ultimo. Vedete, la Java Virtual Machine non è un software. Oracle, i proprietari di Java, hanno la loro implementazione della Java Virtual Machine, ma altre persone possono farcela se soddisfa varie richieste pratiche e contrattuali.
Queste diverse implementazioni significano che il tuo codice può girare senza intoppi su una Java Virtual Machine, ma crash e masterizzazione su un'altra. Sebbene, in pratica, è possibile scrivere il codice una sola volta e eseguirlo ovunque, a volte è necessario eseguire il debug di codice più complesso in diverse implementazioni Java Virtual Machine per garantire il corretto funzionamento.
Hai esperienza di lavoro con Java Virtual Machine? Se è così, c'è qualcosa che ho perso qui che dovrebbe essere menzionato?
Immagine di credito: Michaelaw, Dcoetzee
Scopri di più su: Java, programmazione.