JVM ist Java Virtual Machine, ein Speicherbereich, in dem Klassen (Code) geladen und Objekte (Daten) gemeinsam genutzt werden. JVM entspricht einem Betriebssystemprozess.
Wenn Sie in Ihrer Befehlszeile java...
eingeben, führen Sie einen unabhängigen Prozess aus, der Java-Klassen in den Speicher lädt, die Basisklassen aus Java und Ihre (aus den angegebenen .class-Dateien oder .jar).
Ein weiterer Befehl java...
lädt einen anderen Prozess mit seinem eigenen Speicher und lädt die Klassen selbst.
Verwechslung von Instanzwörtern : Wenn Sie "zwei Instanzen derselben JVM" sagen. Es ist üblich, Instanz einer JVM zu einem separaten Prozess zu sagen, dh zu einer geladenen unabhängigen JVM. Wenn Sie sagen: zwei Prozesse laufen JVM 1.5, OK, es ist die gleiche JVM in dem Sinne, dass es die gleiche Version ist, aber sie sind verschiedene Prozesse, verschiedene "Instanzen", in jedem Sinne unabhängig.
Webapp-Verwirrung: Eine Webanwendung (als Beispiel) ist einfach eine Ansammlung von Klassen und Objekten, die instanziiert sind und eine URL auf einem Webserver enthalten. Sie können Tomcat mit 10 verschiedenen Apps starten - es sind 10 verschiedene Gruppen von Klassen und Objekten, von denen jede unterschiedliche Anforderungen erfüllt, aber tatsächlich teilen sie sich den gleichen Speicherplatz (OS-Prozess). Eine Webapp kann die Objekte anderer Webapps nicht berühren, weil niemand ihnen einen Verweis auf die anderen Objekte gibt (und Klassen sind irgendwie versteckt, aber das ist eine andere Geschichte, die als Klassenladen bezeichnet wird).
Wenn Sie Suns java.exe von ihrer JDK / JRE Version 1.6 aus dem gleichen Quellpfad zweimal gestartet haben, erhalten Sie zwei getrennte und eindeutige JVM-Instanzen. Es würde keine Freigabe zwischen ihnen geben, wenn Sie es nicht über Ihre Anwendungen konfiguriert haben. Wenn Sie möchten, dass zwei verschiedene JVMs laufen, müssen Sie eine java.exe eines Typs (sagen wir 1.5) von einem Speicherort und eine java.exe (Version 1.6) von einem anderen starten.