Ich muss JAR-Datei in separater JVM von einer anderen Java-Anwendung aufrufen, und es sehr CPU-aufwändig, so sollte es mit Hintergrundpriorität ausgeführt werden, um den Rest des Systems nicht zu beeinflussen. Gibt es dafür eine plattformübergreifende Methode?
Die einfache Antwort ist, dass es keine portable Möglichkeit gibt, die Priorität eines Prozesses in Java zu ändern. (Threads - ja, Prozesse - Nr.)
Wenn Ihre Java-Anwendung eine neue JVM zum Ausführen der CPU-intensiven Anwendung starten muss, besteht die Möglichkeit, dass sie nicht vollständig portierbar ist. Beispielsweise müssen Sie normalerweise den Pfadnamen des Befehls java
(oder gleichwertig), ein Argument -cp
(oder gleichwertig), systemspezifische JVM-Optionen usw. angeben.
Angenommen, der Befehl zum Starten der JVM ist bereits nicht portierbar, sollte es kaum von Belang sein, wenn Sie den Befehl durch ein Wrapper-Skript ersetzen, das betriebssystemspezifische Dinge ausführt, um die Priorität zu ändern der gestartete Prozess. (Für UNIX oder Linux können Sie einfach nice
verwenden, um die JVM zu starten.)
Ich weiß nicht, wie ich die Priorität für einen externen Prozess festlegen soll. Thread
hat jedoch eine setPriority
-Methode. Wenn Sie also die Zielanwendung steuern, könnten Sie vielleicht einen Schalter hinzufügen, der der Anwendung sagt, dass sie ihre eigene Priorität auf Minimum setzen soll:
theThread.setPriority(Thread.MIN_PRIORITY);
Wenn es immer noch Auswirkungen auf das System hat, schlage ich vor, dass Sie einige kurze sleep
ing verschachteln, um die CPU zu entladen.
Eine andere Option:
Wenn Sie das Ziel .jar
in den Klassenpfad der "initiierenden" Anwendung setzen, können Sie einfach die main
-Methode der jar-Datei in einem neu erstellten Thread aufrufen und dann die Priorität mit der obigen Einstellung festlegen Methode. (Dies sollte funktionieren, auch wenn Sie den Quellcode der Ziel-JAR-Datei nicht kontrollieren.)
Tags und Links java