Instanzen von JVM

8

Wenn Java über zwei verschiedene Befehlszeilen aufgerufen wird, sind zwei verschiedene JVMs oder zwei separate Instanzen derselben JVM beteiligt.

    
JavaUser 06.09.2010, 14:50
quelle

4 Antworten

21

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).

    
helios 06.09.2010, 15:17
quelle
1

Zwei separate JVMs. Sie können viele Dinge innerhalb derselben JVM ausführen (sagen wir 10 Webapps, die von derselben Tomcat-Instanz bedient werden), aber es gibt nur einen Java-Befehl, um Tomcat zu starten.

    
bwawok 06.09.2010 14:53
quelle
1

Was ist der Unterschied in Ihrer Frage? Ich würde sagen: zwei verschiedene JVM-Instanzen. :)

Jede Ausführung des Befehls java ruft eine neue JVM-Instanz auf. Die laufende Java-Anwendung könnte neue Java-Threads ausführen (wie ein Tomcat mit Web-Anwendungen).

    
splash 06.09.2010 14:52
quelle
1

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.

    
Paul Gregoire 06.09.2010 15:23
quelle

Tags und Links