2016-04-28 16 views
1

Ich möchte JVM-Flags ändern/setzen, sobald mein Programm startet. Ich kann das nicht in der Befehlszeile tun, weil ich mit Leuten arbeite, die nicht einmal wissen, dass es existiert. Es muss also automatisch im Programm gemacht werden.JVM-Flags zur Laufzeit ändern

Ich interessiere mich besonders für diese drei Flaggen: -Xms4G -Xmx8G -noverify

ich in this discussion (oder that one) festgestellt, dass es möglich ist, einige Fahnen mit dem Interface HotSpotDiagnosticMXBean zu ändern. Und this code zeigt, wie die Flags geändert werden. Leider werden die Flags Xms oder nur ms nicht erkannt und dann wird eine Ausnahme ausgelöst.

Ich habe auch festgestellt, dass capsule die Arbeit tun kann, aber es scheint ziemlich schwer zu bedienen.

Gibt es einen einfachen Weg, es zu tun?

+2

Ich würde sagen, Sie können nicht. Aber Sie könnten eine zweite jvm aus Ihrem Code mit den gewünschten Parametern mit einem 'ProcessBuilder' starten. – joshiste

+0

Ich bin mir nicht sicher, wie es funktionieren würde. Starten Sie eine andere JVM in Ordnung, aber mein Programm hätte bereits auf der ersten gestartet. Wie kann ich das zweite einschalten? – FiReTiTi

Antwort

3

Sie müssen zwei Programme schreiben: eines, das nur ein Launcher ist, um die richtigen Parameter für die Ausführung Ihres anderen Programms bereitzustellen. So funktioniert Eclipse, Jitsi, und die InstallShield Multiplatform Launcher, die jetzt am Ende des Lebenszyklus stehen. Es kann sein, dass Sie eine triviale (zB eine Zeile oder in der Nähe davon) Shell, .bat oder VBS-Skript schreiben können, um die Aufgabe zu erledigen.

+1

Vielen Dank für Ihre Antwort! Also muss ich eine erste, sehr einfache, ausführbare JAR-Datei erstellen, mit dem Namen Launcher, die eine zweite ausführbare JAR-Datei startet, aber mit allen erforderlichen Argumenten. Also in meinem Fall 'java -noverify -Xms4G -Xmx8G -jar MyMainJar.jar'. Hab ich recht? Wenn ja, wüssten Sie den Befehl, nur einen Befehl zu starten? – FiReTiTi

+0

Btw, sagte ich Jar Launcher, weil die weichen muss Multi-Plattenformen sein. – FiReTiTi

+1

Ja, Sie können das Launcher-Programm in Java schreiben. (So ​​sind die InstallShield Multiplatform Launcher) Sie können ['Runtime.exec()'] (https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec -java.lang.String: A-) oder für mehr Kontrolle ['ProcessBuilder'] (https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) – dsh

Verwandte Themen