在Unix系统上,您可以使用nice
命令以较低的CPU优先级运行进程:
nice program
您可以使用它来运行JVM进程:
nice java -jar program.jar
该JVM进程运行的Java程序将启动多个线程。
nice
更改是否会影响这些Java线程的调度?也就是说,Java线程在以
nice java -jar program.jar
以
运行时 java -jar program.jar
一般情况下,这将取决于系统,因此我对Linux案例感兴趣。
答案 0 :(得分:2)
根据ps
报告将好处应用于java线程。我使用等待用户输入的java应用程序运行此快速测试:
启动流程:nice -n 19 java Main
输出ps -m -l 20746
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 - 1000 20746 10006 0 - - - 1739135 - pts/2 0:00 java Main
0 S 1000 - - 0 99 19 - - futex_ - 0:00 -
1 S 1000 - - 0 99 19 - - wait_w - 0:00 -
1 S 1000 - - 0 99 19 - - futex_ - 0:00 -
1 S 1000 - - 0 99 19 - - futex_ - 0:00 -
启动流程:nice -n 15 java Main
输出ps -m -l 21488
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 - 1000 21488 10006 0 - - - 1722494 - pts/2 0:00 java Main
0 S 1000 - - 0 95 15 - - futex_ - 0:00 -
1 S 1000 - - 0 95 15 - - wait_w - 0:00 -
1 S 1000 - - 0 95 15 - - futex_ - 0:00 -
1 S 1000 - - 0 95 15 - - futex_ - 0:00 -
NI
列似乎反映了我传递给nice
的内容,优先级也相应地发生了变化。我使用jps
获得了进程ID(20746,21488)。
请注意,例如,运行jstack 21488
不会提供上述信息。
我在Ubuntu 16.04 LTS(64位)
上运行了上述内容答案 1 :(得分:1)
实际上......根据POSIX.1,Niceness是应用程序的属性。这是一篇更详细的文章。 is nice() used to change the thread priority or the process priority?
答案 2 :(得分:0)
Java并不特别。它只是一个过程,操作系统以与任何其他过程相同的方式设置其“好处”。
在Linux上,Java线程是使用本机线程实现的,因此,“niceness”受OS控制的约束,与任何其他本机线程一样。