Risposta breve: spesso, sì, riceverai un'applicazione per JVM. Risposta lunga: la JVM può essere utilizzata in questo modo, e questa potrebbe essere l'opzione migliore, ma non deve esserlo.
Tutto dipende da ciò che consideri una "applicazione". Un IDE è un buon esempio di un'applicazione che viene presentata ai suoi utenti finali (cioè noi) come una singola entità ma che in realtà è composta da più applicazioni sottostanti (compilatori, test runner, strumenti di analisi statica, pacchetti, gestori di pacchetti, progetti / strumenti di gestione delle dipendenze, ecc.). In tal caso ci sono una varietà di trucchi che l'IDE utilizza per garantire che l'utente sperimenta un'esperienza integrata pur essendo al contempo protetto (in una certa misura) dai singoli capricci degli strumenti sottostanti. Uno di questi trucchi consiste nell'eseguire alcune cose in una JVM separata, comunicando tramite file di testo o tramite le funzionalità di debug a livello di applicazione.
I server delle applicazioni (Wildfly, Glassfish, Websphere, Weblogic, ecc.) Sono applicazioni la cui ragion d'essere è agire come contenitori per l'esecuzione di altre applicazioni. In tal caso, da un punto di vista, esiste un'unica JVM per applicazione (ovvero una JVM viene utilizzato per eseguire l'intero server delle applicazioni) ma in realtà ci sono più applicazioni contenute all'interno di quella JVM a sé stanti, ciascuna logicamente separata l'una dall'altra nel proprio classloader (riducendo la possibilità di crosstalk accidentale durante il processo).
Quindi, tutto dipende davvero da ciò che consideri application
essere. Se stai semplicemente parlando di "la cosa che viene eseguita quando viene chiamato 'main ()'", allora stai guardando un'applicazione per JVM: quando il sistema operativo avvia la JVM, la JVM esegue il public static void main()
metodo di una singola classe .
Ma una volta che le tue applicazioni iniziano a diventare più complicate, i tuoi confini diventano più sfumati. Un IDE come Intellij o Eclipse riutilizzerà gran parte delle stesse cose di "javac", nella stessa JVM o in una diversa, oltre a svolgere un lavoro diverso (come ridipingere lo schermo). E gli utenti di un'applicazione Web su un server di applicazioni (JVM condivisa) potrebbero effettivamente utilizzare più o meno la stessa applicazione "principale" che potrebbe essere utilizzata localmente tramite la riga di comando.