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.
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.
| Termine | Cosa è | Quando serve |
|---|---|---|
| JVM | Il motore che esegue il bytecode | Sempre, per eseguire qualsiasi programma Java |
| JRE | La JVM più le librerie standard | Per eseguire programmi Java |
| JDK | La JRE più il compilatore e gli strumenti di sviluppo | Per 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
No. Java è il linguaggio; la JVM è l'ambiente di runtime che esegue l'output compilato. Altri linguaggi, come Kotlin, compilano anch'essi in bytecode e girano sulla stessa JVM.
Ti serve un runtime Java, che include la JVM. Molti launcher ne includono uno per te, quindi potresti già averlo senza installare nulla separatamente.
La JVM esegue il bytecode. Il JDK è il kit completo per sviluppatori, che include il compilatore e gli strumenti, che si utilizzano per creare programmi Java in primo luogo.
All'inizio interpreta il bytecode, poi il compilatore JIT converte il codice più caldo in codice macchina nativo mentre il programma è in esecuzione. Questo riscaldamento rappresenta il costo di avvio; l'aumento di velocità si verifica in seguito.