为什么在没有“Thread.sleep”的情况下,“while(true)”会在Linux上导致100%的CPU使用率,而不是在Windows上使用?

我在java中创build了一个简单的程序:

public static void main(String[] args) throws InterruptedException { while (true) ; } 

如果我在Linux机器上运行它,它会显示100%的CPU使用率,但不会导致操作系统显示缓慢。 但是,如果我在Windows上运行完全相同的代码,则只会显示大约20%的CPU使用率。

我在Windows上使用Oracle JRE,在Linux上使用OpenJDK 6。

我想知道如果Windows的调度程序随机抢占线程和Linux的不是?

默认情况下,Linux上以所谓的IRIX模式运行,而Windows任务pipe理器不运行。 假设你有4个核心:

  • 在IRIX模式下,1个完全使用的核心是100%,4个核心是400%。

  • 在IRIX模式closures时,1个完全使用的核心是25%,4个核心是100%。

这意味着,默认情况下,Linux上的top会显示无限循环为〜100%,Windows将显示为〜25%,这意味着完全相同的事情。

您可以在top使用Shift + i运行时切换IRIX模式。 这将使数字相匹配。