[英]Cross-platform way to change java process priority
我需要在與另一個Java應用程序分開的JVM中調用.jar文件,它非常占用CPU,因此應以后台優先級運行,以免影響系統的其余部分。 有沒有跨平台的方法可以做到這一點?
簡單的答案是,沒有可移植的方法來更改Java中進程的優先級。 (線程-是,進程-否。)
如果您的Java應用程序需要啟動一個新的JVM來運行CPU密集型應用程序,那么很可能它不是完全可移植的。 例如,您通常需要提供java
命令的路徑名(或等效項),- -cp
參數(或等效項),系統特定的JVM選項,等等。
因此,假設啟動JVM的命令已經不可移植,那么用一個包裝程序腳本替換該命令就沒關系了,該腳本執行特定於OS的操作來更改啟動進程的優先級。 (例如,對於UNIX或Linux,您可以簡單地使用nice
啟動JVM。)
我不知道為外部進程設置優先級的方法。 但是, Thread
具有setPriority
方法,因此,如果您控制目標應用程序,則可以添加一個開關,告訴應用程序將其自身的優先級設置為最小:
theThread.setPriority(Thread.MIN_PRIORITY);
如果仍然影響系統,建議您插入一些短暫的sleep
以減輕CPU負擔。
另外一個選項:
如果將目標.jar
放在“正在啟動”應用程序的類路徑中,則可以在新創建的線程中簡單地調用jar文件的main
方法,然后使用上述方法設置優先級。 (即使您不控制目標jar文件的源代碼,這也應該起作用。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.