簡體   English   中英

跨平台更改Java進程優先級的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM