La JVM (Java™ virtual machine) è un ambiente del tempo di esecuzione che è possibile aggiungere in un browser Web o in qualsiasi sistema operativo, come IBM® i. La JVM (Java virtual machine) esegue istruzioni generate da un compilatore Java. Essa consiste in un interpreter bytecode e tempo di esecuzione che consente di eseguire i file di classe Java su qualsiasi piattaforma, indipendentemente dalla piattaforma su cui sono stati sviluppati in origine.
Il programma di caricamento classi e il responsabile della riservatezza, che fanno parte del tempo di esecuzione Java, isolano il codice che proviene da un'altra piattaforma. Essi possono anche limitare le risorse di sistema cui può accedere ogni classe caricata.
Oltre caricamento e all'esecuzione dei bytecode, la JVM (Java virtual machine) include un programma di raccolta dati inutili che gestisce la memoria. La Raccolta di dati inutili Java viene eseguita nello stesso momento del caricamento e dell'interpretazione dei bytecode.
L'ambiente di tempo di esecuzione Java viene avviato ogni qualvolta si immette il comando RUNJVA (Esecuzione Java) oppure il comando JAVA sulla riga comandi IBM i. Dal momento che l'ambiente Java dispone di più sottoprocessi, è necessario eseguire la JVM (Java virtual machine) su un lavoro che supporti i sottoprocessi, come il lavoro BCI (batch immediato). Come mostra la seguente figura, una volta avviata la JVM (Java virtual machine), è possibile avviare ulteriori sottoprocessi su cui viene eseguito il programma di raccolta di dati inutili.
Figura 1: il tipico ambiente Java quando si utilizza il comando CL RUNJVA o JAVA

È inoltre possibile avviare JRE (Java runtime environment) utilizzando il comando java in Qshell dal Qshell Interpreter. In questo ambiente, Qshell Interpreter è in esecuzione su un lavoro BCI associato ad un lavoro interattivo. JRE (Java runtime environment) viene avviato sul lavoro su cui è in esecuzione Qshell Interpreter.
Figura 2: ambiente Java environment quando si utilizza il comando java in Qshell

Quando JRE (Java runtime environment) viene avviato da un lavoro interattivo, viene visualizzato il pannello Java Shell. Tale pannello fornisce una riga di immissione per immettere i dati nel flusso System.in e per visualizzare i dati registrati nel flusso System.out e System.err.