2009-06-24 12 views
1

Ich habe ein Bash-Skript, das nacheinander ein Java-Programm aufruft. Das ist ein bisschen schwierig, aber hauptsächlich mache ich eine Schleife und führe etwa 1500 mal das gleiche Java-Programm mit verschiedenen Argumenten aus.Sequentielle Ausführung von Java-Programmen == sequentielle Aktivierung des jvm?

Meine Frage ist, wenn Java 1.5 (die Sun VM) verwendet wird, jedes Mal, wenn ich das Java-Programm aufruft, wird eine neue Instanz des jvm erstellt? (Ich bin mir nicht sicher, ob das das richtige Vokabular ist ...)

Sollte ich diese Situation vermeiden, indem ich eine Ebene der Indirektion einführe, dh eine Liste aller Parameter aufbaute und dann ein Java-Programm ausführe, das diese Parameter übernimmt und ausführt Was war bisher mein Einstiegspunkt?

Oder kann ich mit dem Problem umgehen, indem Sie die JVM als resident oder so ähnlich Konfiguration und ruft dynamisch mein Programm ....

Hoffnung, das ist klar ....

thx ...

+0

Ja, ich wäre sehr überrascht, wenn der JVM-Start die tatsächliche Ausführungszeit Ihres Programms nicht in den Schatten stellt. –

+0

ich auch .. Es war da, bevor ich kam und ich kämpfe gegen wirklich schlechte Leistung ... das ist ein guter Ausgangspunkt – LB40

Antwort

4

Sie können die Parameter in einer Datei speichern und das Java-Programm verwenden, um sie ohne Neustart zu verarbeiten. Sie könnten auch die Parameter in die laufende Java-App über die Konsole einbinden, ähnlich wie zum Beispiel ls | grep java

Edit: Und für die erste Frage. Ich bezweifle, dass die Java-Laufzeit absichtlich im Speicher bleiben würde. Wahrscheinlich würden die meisten JRE-Dateien sowieso im Plattencache verbleiben. Unter Windows gibt es einen Java-Schnellstartdienst, der die JRE-Dateien enthält, um die Startzeit für ein Java-Programm zu reduzieren. Ich weiß nicht, ob es eine ähnliche Sache für * nix gibt.

+0

yep, das ist eigentlich, was ich beginne zu tun ... – LB40

1

Natürlich wäre es die beste Lösung, vorher alle Parameter zu haben und das Programm danach auszuführen. Wenn Sie das aus irgendeinem Grund nicht tun können, habe ich eine sehr schmutzige Lösung dafür. Lassen Sie Ihr Programm einen Port registrieren und hören Sie ihn zur Eingabe an. Übergeben Sie dann einfach die Argumente an diesen Port, damit Ihr Programm sie als neue Instanz behandelt.

1

JVM Start ist notorisch langsam, und es ist sicherlich nicht beabsichtigt, in einer solchen Schleife zu tun. Leider ist die einzige Möglichkeit, dies zu vermeiden, wenn Sie Kommandozeilenparameter an das Java-Programm übergeben, das Java-Programm selbst in irgendeiner Weise zu ändern, um alternative Formen der Interaktion zu haben (entweder von der Konsole oder einem Port oder einer Datei). . Java Quick Start ist die einzige Lösung (am nächsten zu a), wenn das Java-Programm nicht geändert werden kann.

Die wirkliche Lösung ist, das Java-Programm zu ändern. Die offensichtlichste Änderung wäre, dass Ihre Schleife in eine Datei schreibt und dann das Java-Programm startet, das die Datei Zeile für Zeile liest. Das funktioniert, wenn die Schleife die Ergebnisse des Java-Programms für die nächsten Parameter nicht interessiert.

Wenn dies der Fall ist, dann wäre es wirklich notwendig, diese Beziehung zu einer geeigneten Lösung zu beraten. Die Sockellösung, die von Savvas vorgeschlagen wird, ist sicher eine allgemeine Lösung, aber es kann bessere Optionen geben, abhängig davon, was Sie erreichen müssen.

Verwandte Themen