Ich muss JAR-Datei in separaten JVM von einer anderen Java-Anwendung aufrufen, und es sehr CPU-aufwändig, so sollte es mit Hintergrundpriorität laufen, um den Rest der nicht zu beeinflussen System. Gibt es dafür eine plattformübergreifende Methode?Plattformübergreifende Möglichkeit, Java-Prozesspriorität zu ändern
Antwort
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, ist die Wahrscheinlichkeit groß, dass sie bereits nicht vollständig portierbar ist. Beispielsweise müssen Sie normalerweise den Pfadnamen des Befehls java
(oder gleichwertig), ein -cp
-Argument (oder gleichwertig), systemspezifische JVM-Optionen usw. angeben.
Also angenommen, dass der Befehl zum Starten der JVM bereits nicht tragbar ist, sollte es kaum eine Rolle spielen, wenn Sie den Befehl mit einem Wrapper-Skript ersetzen, das OS-spezifische Dinge zu ändern, die Priorität des gestarteten Prozesses. (Für UNIX oder Linux können Sie einfach nice
verwenden, um die JVM zu starten.)
Ich weiß nicht, wie man die Priorität für einen externen Prozess einstellt. Thread
hat jedoch eine setPriority
Methode, wenn Sie also die Zielanwendung zu steuern, könnten Sie vielleicht einen Schalter hinzufügen, um die Anwendung zu erzählen ihre eigene Priorität auf ein Minimum zu setzen:
theThread.setPriority(Thread.MIN_PRIORITY);
Wenn es immer noch das System betrifft, ich Ich schlage vor, Sie verschachteln einige kurze sleep
ing, um die CPU zu entladen.
Eine weitere Option:
Wenn Sie das Ziel .jar
im Classpath der "Einleitung" Anwendung setzen, können Sie einfach die in einem neu erstellten Thread main
-Methode der jar-Datei aufrufe , und legen Sie dann die Priorität mit der obigen Methode fest. (Dies sollte auch dann funktionieren, wenn Sie den Quellcode der Ziel-JAR-Datei nicht kontrollieren.)
Ich verstehe, er muss einen anderen Prozess spawnen, und diese Methode ist für einen Thread, so glaube ich nicht, dass es funktionieren kann ... – Persimmonium
oh .. hmm .. guter Punkt. Ich nehme an, das macht nur dann Sinn, wenn es eine Möglichkeit gibt, einen Schalter zu dem laufenden Programm hinzuzufügen. – aioobe
Wenn er die Quelle des anderen Prozesses ausgeführt hat, kann er sich auf MIN_PRIORITY setzen, richtig? –
- 1. SBT: Plattformübergreifende Möglichkeit, java.library.path zu setzen?
- 2. Was ist eine plattformübergreifende Möglichkeit, das aktuelle Verzeichnis zu erhalten?
- 3. Plattformübergreifende Möglichkeit zum Öffnen einer Datei mit Java 1.5
- 4. Was ist eine plattformübergreifende Möglichkeit, eine Sounddatei in Python abzuspielen?
- 5. Three.js: Möglichkeit, die Hochachse zu ändern?
- 6. Möglichkeit, eine Deckkraft automatisch ändern zu lassen?
- 7. Einfachste Möglichkeit, Schriftart und Schriftgröße zu ändern
- 8. Schnelle Möglichkeit, eine Zahl manuell zu ändern
- 9. Die effizienteste Möglichkeit, CMSampleBuffer Inhalt zu ändern
- 10. Gibt es eine nicht-Java, plattformübergreifende Möglichkeit, die zugehörige Anwendung für einen bestimmten Dateityp zu starten?
- 11. Gibt es eine plattformübergreifende Möglichkeit, eine Liste laufender Anwendungen zu erhalten?
- 12. Gibt es eine plattformübergreifende Möglichkeit, einen Dateibrowser in Python zu öffnen?
- 13. Gibt es eine Möglichkeit, Team Explorer Everywhere Check-in-Richtlinien über die plattformübergreifende Befehlszeile zu konfigurieren?
- 14. minimale plattformübergreifende GUI lib?
- 15. Plattformübergreifende RTF-Steuerung?
- 16. Bibliothek für plattformübergreifende Partitionsverwaltung?
- 17. Beste plattformübergreifende/SQL GUI?
- 18. Plattformübergreifende mobile Spiele?
- 19. Plattformübergreifende einfache TCP/IP API?
- 20. Dropzone plattformübergreifende Thumbnails
- 21. Paketierung für plattformübergreifende Bereitstellung?
- 22. Plattformübergreifende ServiceStack-Authentifizierung
- 23. Leistung "plattformübergreifende mobile Apps"
- 24. einfache Möglichkeit, PHP-Array zu einzelnen Variablen zu ändern
- 25. Ist Vala eine plattformübergreifende Sprache?
- 26. plattformübergreifende Audio-Bibliothek für .NET
- 27. Xamarin: Einfache plattformübergreifende Alarm-App
- 28. Plattformübergreifende Methode zur CPU/Speicherauslastung
- 29. Wie Programmiersprachen implementieren plattformübergreifende Funktionen?
- 30. C/C++ plattformübergreifende Unicode-Kodierung
im * "einmal schreiben, überall ausführen" * plattformübergreifend, Nein. Aber ein kleines Stück nicht-portablen Code, der auf jedem Un * x (einschließlich OS X) und jedem Windows-Rechner funktioniert, ist wirklich nicht so schwer. +1 zu Stephen C's Antwort. – SyntaxT3rr0r