Kurze Antwort: Oft erhalten Sie eine Anwendung pro JVM. Lange Antwort: Die JVM kann auf diese Weise verwendet werden, und das ist vielleicht die beste Option, muss es aber nicht sein.
Es hängt alles davon ab, was Sie als "Anwendung" betrachten. Eine IDE ist ein gutes Beispiel für eine Anwendung, die ihren Endbenutzern (dh uns) als eine Einheit präsentiert wird, aber tatsächlich aus mehreren zugrunde liegenden Anwendungen besteht (Compiler, Testläufer, statische Analysetools, Packager, Paketmanager, Projekt / Tools für das Abhängigkeitsmanagement usw.). In diesem Fall gibt es eine Vielzahl von Tricks, mit denen die IDE sicherstellt, dass der Benutzer eine integrierte Erfahrung erfährt und gleichzeitig (in gewissem Maße) vor den einzelnen Unwägbarkeiten der zugrunde liegenden Tools geschützt ist. Ein solcher Trick besteht darin, einige Dinge in einer separaten JVM zu erledigen und entweder über Textdateien oder über die Debugging-Funktionen auf Anwendungsebene zu kommunizieren.
Anwendungsserver (Wildfly, Glassfish, Websphere, Weblogic usw.) sind Anwendungen, deren Ziel es ist, als Container für andere Anwendungen zu fungieren. In diesem Fall gibt es aus einer Perspektive eine einzelne JVM pro Anwendung (dh eine JVM) wird verwendet, um den gesamten Anwendungsserver auszuführen. Es sind jedoch tatsächlich mehrere Anwendungen in dieser JVM enthalten, die jeweils in ihrem eigenen Klassenladeprogramm logisch voneinander getrennt sind (wodurch die Möglichkeit eines versehentlichen Übersprechens während des Prozesses verringert wird).
Es hängt also wirklich davon ab, was Sie für eine application
halten. Wenn Sie nur über "das Ding sprechen, das ausgeführt wird, wenn 'main ()' aufgerufen wird", dann sehen Sie sich eine Anwendung pro JVM an - wenn das Betriebssystem die JVM startet, führt die JVM die public static void main()
Methode einer einzelnen Klasse aus .
Sobald Ihre Anwendungen jedoch komplizierter werden, verschwimmen Ihre Grenzen. Eine IDE wie Intellij oder Eclipse verwendet einen Großteil des gleichen Materials wie 'javac' entweder in derselben oder einer anderen JVM und führt unterschiedliche Arbeiten aus (z. B. das Neulackieren des Bildschirms). Benutzer einer Webanwendung auf einem (gemeinsam genutzten JVM-) Anwendungsserver verwenden möglicherweise tatsächlich dieselbe Kernanwendung, die lokal über die Befehlszeile verwendet werden kann.