- La JVM (Java Virtual Machine) è il programma che esegue il bytecode Java compilato.
- Lo stesso bytecode funziona su Windows, macOS e Linux, quindi le mod non necessitano di essere ricompilate.
- I giocatori necessitano di un runtime Java (JRE); i modder necessitano del JDK completo con il compilatore.
- Minecraft Java Edition e ogni mod Fabric, inclusa Opal, funzionano sulla 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.
Dove si integra Opal
Opal è un mod Fabric, quindi funziona sulla stessa JVM del gioco. Se lo stai configurando, la guida alla configurazione ti guiderà attraverso il processo.
Cosa fa realmente 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 ed esegue su di esse 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.
JVM, JRE e JDK
Questi tre termini vengono spesso confusi, quindi ecco la distinzione.
| Termine | Cosa è | Quando ne hai bisogno |
|---|---|---|
| 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 del JDK completo in modo da poter compilare Java in bytecode in primo luogo.
Come la JVM esegue il tuo codice velocemente
La JVM inizia interpretando il bytecode un'istruzione alla volta. Mentre è in esecuzione, osserva 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 riscaldamento, il codice più utilizzato viene eseguito a velocità prossima a quella nativa.
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 è indulgente da scrivere ed è un linguaggio comune per i modder alle prime armi.
Perché è importante per Minecraft
Minecraft Java Edition si basa 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.
Questo è anche il motivo per cui i launcher ti permettono di regolare impostazioni come la dimensione dell'heap e la versione di Java da utilizzare. Stai configurando la JVM che ospita il gioco, non il gioco stesso.
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 funzionano sulla stessa JVM.
È necessario 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.
Inizialmente interpreta il bytecode, poi il compilatore JIT converte il codice più utilizzato in codice macchina nativo durante l'esecuzione del programma. Tale fase di riscaldamento rappresenta il costo di avvio; il miglioramento delle prestazioni si verifica successivamente.