我用java创建了一个简单的程序:

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上的top在所谓的IRIX模式下运行,而Windows任务管理器则没有.假设您有4个核心:

  • 在IRIX模式打开时,1个充分利用的内核为100%,4个内核为400%.

  • 在IRIX模式关闭时,1个充分利用的内核为25%,4个内核为100%.

这意味着默认情况下,Linux上的top会将无限循环显示为~top%,而Windows将显示为~25%,意思完全相同.

topShift+i运行时,您可以切换IRIX模式.这将使数字匹配.

Java相关问答推荐

如何在Inspaut中获取当前路径的 * 模式 *?

如何让TaskView总是添加特定的列来进行排序?

在Java 8之后,HashMap的最坏情况下时间复杂度仍然是O(n)而不是O(log n)?

Spring Boot@Cachebale批注未按预期工作

CompleteableFuture是否运行在不同的内核上?

自定义批注的外推属性值

如何在一行中使用Dijkstra中的Java Stream

Spring安全令牌刷新和JWT签名与本地计算的签名不匹配

使用正则表达式从字符串中提取多个值

如何在JUNIT测试中覆盖ExecutorService?

如何用内置Java从JavaFX应用程序中生成.exe文件?

Spring Boot中的应用程序.properties文件中未使用的属性

Java中HashSet的搜索时间与TreeSet的搜索时间

如何在SWT菜单项文本中保留@字符

在线程Java中调用Interrupt()之后调用Join()

如何调整JButton的大小以适应图标?

接受类及其接口的Java类型(矛盾)

Kotlin-仅替换字符串中最后一个给定的字符串

在Spring Boot中使用咖啡因进行缓存

AspectJ编织外部依赖代码,重新打包jar并强制依赖用户使用它