Learn · concepts

Cos'è la JVM? La Java Virtual Machine spiegata

La JVM esegue il bytecode Java su qualsiasi sistema operativo. È per questo che Minecraft Java Edition e ogni mod di Fabric funzionano allo stesso modo su Windows, macOS e Linux.

TRtrolPublished 4 min read

Cos'è la JVM?

La JVM, o Java Virtual Machine, è il programma che esegue il codice Java. Si scrive in Java, un compilatore lo trasforma in bytecode e la JVM esegue quel bytecode su qualsiasi sistema operativo. Ecco perché Minecraft Java Edition e i mod creati per essa si comportano allo stesso modo su Windows, macOS e Linux senza dover ricompilare. La JVM è lo strato di astrazione che rende "scrivi una volta, esegui ovunque" una realtà, invece di uno slogan pubblicitario.

Cosa fa effettivamente la JVM

La JVM esegue bytecode, non codice sorgente. Quando compili un programma Java, non ottieni un eseguibile per Windows o Mac. Ottieni file di classe pieni di bytecode, un set di istruzioni compatto che la JVM comprende. La JVM legge quelle istruzioni e le esegue sulla tua macchina.

Quello strato aggiuntivo è il punto. Lo stesso bytecode funziona ovunque sia presente una JVM, quindi "scrivi una volta, esegui ovunque" è la versione abbreviata del motivo per cui Java si è diffuso così ampiamente. La JVM è la parte che rende vera questa promessa. Un file JAR di mod di Fabric funziona allo stesso modo sia che il giocatore utilizzi Windows, macOS o Linux, perché tutti eseguono lo stesso bytecode attraverso la stessa JVM, e la JVM gestisce le differenze hardware

JVM, JRE e JDK

Questi tre termini vengono spesso confusi, quindi ecco la distinzione.

TermineCosa èQuando serve
JVMIl motore che esegue il bytecodeSempre, per eseguire qualsiasi programma Java
JRELa JVM più le librerie standardPer eseguire programmi Java
JDKLa JRE più il compilatore e gli strumenti di sviluppoPer creare programmi Java

Un giocatore ha bisogno solo di un runtime per avviare il gioco. Uno sviluppatore che crea una mod ha bisogno dell'intero JDK per poter compilare il Java in bytecode in primo luogo

Come la JVM esegue il tuo codice velocemente

La JVM inizia interpretando il bytecode un'istruzione alla volta. Durante l'esecuzione, monitora quali metodi vengono chiamati più frequentemente. Questi percorsi "caldi" vengono passati al compilatore JIT, che li converte in codice macchina nativo al volo. Dopo il periodo di riscaldamento, il codice più utilizzato viene eseguito a velocità prossima a quella nativa. Ecco perché Minecraft risulta inizialmente un po' lento e poi si stabilizza: il JIT sta lavorando in background.

La JVM gestisce anche la memoria per te. Un garbage collector recupera gli oggetti che non utilizzi più, quindi non devi liberare la memoria manualmente come faresti in C. Questo è uno dei motivi per cui Java è facile da scrivere ed è un linguaggio comune per i modder alle prime armi. La gestione della memoria è integrata.

Perché è importante per Minecraft

Minecraft Java Edition funziona sulla JVM, e lo fanno anche tutti i client di utilità e i mod che la prendono di mira. Il codice di un client può essere in Java, Kotlin o un altro linguaggio JVM, perché tutti compilano nello stesso bytecode che la JVM esegue. Un mod Fabric viene distribuito come un jar di bytecode, il loader lo integra nel gioco all'avvio e la JVM esegue l'intero processo come uno solo.

Ecco anche il motivo per cui i launcher permettono di regolare impostazioni come la dimensione dell'heap e quale versione di Java utilizzare. Stai configurando la JVM che ospita il gioco, non il gioco stesso. Fornire più memoria alla JVM significa che Minecraft ha più spazio a disposizione. Scegliere una versione più recente di Java potrebbe darti miglioramenti in termini di velocità, dato che le JVM più recenti spesso ottimizzano meglio i percorsi di codice più utilizzati.

FAQ