2009-05-12 6 views
2

Ich denke über die Ausführung mehrerer Instanzen der gleichen Java-Binärdatei (eine Socket-Anwendung) mit verschiedenen Konfigurationsdateien (als Befehlszeilenparameter). Wird die Situation von der JVM korrekt gehandhabt? Mit anderen Worten: Wenn ich keine gemeinsamen Ressourcen habe (Dateien, die gesperrt werden können usw.), wird dieser Ansatz Probleme verursachen? Wenn ja, welche Dinge muss ich vorsichtig sein?Kann ich mehrere Instanzen einer Java-Klassendatei ausführen?

Antwort

10

Wenn Sie mehrere Instanzen von Java über die Befehlszeile starten, erhalten Sie mehrere laufende JVMs (eine pro Instanz).

Wenn keine gemeinsamen Ressourcen vorhanden sind, sollten Sie überhaupt keine Probleme haben.

0

Kein Problem damit. Tatsächlich finde ich den umgekehrten Fall ein bisschen nervig - dass es keine (einfache) Möglichkeit gibt, die Anzahl der startbaren Instanzen innerhalb desselben Computers zu begrenzen.

+0

Es gibt nur eine Verbindung zu einem ServerSocket, die nachfolgenden Starts werden nicht in der Lage sein, eine Verbindung zu demselben Server-Socket herzustellen. – Siddharth

+0

... funktioniert, solange kein anderes Programm den gleichen Port verwendet. In diesem Fall können Sie nicht einmal eine Instanz Ihres Programms starten :) –

+0

jetzt ist das reparierbar, und eine entfernte Chance. es ist zumindest besser als "kein einfacher Weg" – Siddharth

1

Wie Matthew bereits sagte, solange keine gemeinsamen Ressourcen vorhanden sind, sollten wir keine Probleme sehen.

Um ein bisschen mehr hinzuzufügen, ist JVM wie ein Container, der eine Ausführungsumgebung für ein Java-Programm und eine JVM bietet, die jedes Mal erstellt wird, wenn wir Java über die Befehlszeile aufrufen.

http://en.wikipedia.org/wiki/Java_Virtual_Machine

1

Wenn Sie viele Instanzen haben dann können Sie ein Problem mit einem übermäßigen Speicherverbrauch haben und langsam mal starten. Ein Großteil der JRE wird geteilt, aber nicht alles und nicht im Allgemeinen Anwendungscode und Ressourcen. Einige JREs versuchen dies zu beheben, zum Beispiel neuere Versionen des kompilierten Anwendungscodes für IBM JRE 6.

Wenn der gesamte Code gut geschrieben ist (keine veränderbaren statischen Variablen (einschließlich Singletons)), sollte es kein Problem sein, einen einzigen Prozess zu verwenden.

Verwandte Themen