Réponse courte: souvent, oui, vous obtiendrez une application par JVM. Réponse longue: la JVM peut être utilisée de cette façon, et c'est peut-être la meilleure option, mais ce n'est pas obligatoire.
Tout dépend de ce que vous considérez comme une «application». Un IDE est un bon exemple d'application qui est présentée à ses utilisateurs finaux (c'est-à-dire nous) comme une seule entité mais qui est en fait composée de plusieurs applications sous-jacentes (compilateurs, testeurs, outils d'analyse statique, packagers, gestionnaires de packages, projet / outils de gestion des dépendances, etc.). Dans ce cas, il existe une variété d'astuces que l'EDI utilise pour s'assurer que l'utilisateur expérimente une expérience intégrée tout en étant également protégé (dans une certaine mesure) des aléas individuels des outils sous-jacents. L'une de ces astuces consiste à effectuer certaines opérations dans une JVM séparée, en communiquant soit via des fichiers texte, soit via les fonctions de débogage au niveau de l'application.
Les serveurs d'applications (Wildfly, Glassfish, Websphere, Weblogic, etc.) sont des applications dont la raison d'être est de servir de conteneurs pour l'exécution d'autres applications. Dans ce cas, d'un point de vue, il y a une seule JVM par application (c'est-à-dire une JVM est utilisé pour exécuter l'ensemble du serveur d'applications), mais il existe en fait plusieurs applications contenues dans cette JVM, chacune logiquement séparée les unes des autres dans leur propre chargeur de classe (ce qui réduit le risque de diaphonie accidentelle en cours de processus).
Donc, tout dépend vraiment de ce que vous considérez application
être. Si vous parlez purement de "la chose qui s'exécute lorsque 'main ()' est appelé", alors vous regardez une application par JVM - lorsque le système d'exploitation démarre la JVM, la JVM exécute la public static void main()
méthode d' une seule classe .
Mais une fois que vos applications commencent à se compliquer, vos limites deviennent plus floues. Un IDE tel qu'Intellij ou Eclipse réutilisera une grande partie des mêmes éléments que «javac», que ce soit dans la même JVM ou dans une autre, et effectuera un travail différent (comme repeindre l'écran). Et les utilisateurs d'une application Web sur un serveur d'applications (JVM partagé) peuvent en fait utiliser à peu près la même application «principale» que celle qui pourrait être utilisée localement via la ligne de commande.