【问题标题】:What does Runtime.getRuntime().availableProcessors() exactly return? [duplicate]Runtime.getRuntime().availableProcessors() 究竟返回什么? [复制]
【发布时间】:2013-12-10 14:40:01
【问题描述】:

我的处理器是 Intel® Core™ i7-3610QM 处理器(6M 高速缓存,2.30 GHz),它拥有 4 个处理器内核和 8 个线程(这到底是什么意思?)。我正在运行一个简单的 Java 程序来找出“Java 虚拟机可用的处理器”的数量。 (来自 Oracle,Java 7 的 API),它为我返回 8,而不是 4。有人可以解释一下为什么会这样吗?

下面是简单的java代码:

public class MyTest {
    public static void main(String args[]) {
        System.out.println("Number of cores available : " + Runtime.getRuntime().availableProcessors());
    }
}

【问题讨论】:

    标签: java cpu-cores


    【解决方案1】:

    这更像是 IMO 的硬件问题。

    您的处理器是四个物理内核,加上一个称为“超线程”的东西,其本质上的意思是“告诉系统您确实有八个内核,即使您有四个内核。”据英特尔称,与仅将其表示为四个内核相比,这会带来 10-20% 的性能提升。

    您所看到的就是操作系统所看到的:八个内核。在物理上,它是四个核心,外加超线程。

    您可能想查看this answer on a similar question,其中指出:

    处理器的数量基本上就是执行引擎的数量 能够运行您的代码。 i5 变体之一是 4 核 CPU, i5-7 系列。这些可能是物理上不同的处理器(甚至 尽管它们存在于同一芯片内)或者它们可能是合乎逻辑的 使用超线程时的处理器。

    【讨论】:

    • 超线程不仅仅是伪造内核数量。架构的前端有一些实际的逻辑,可以实现更快的上下文切换。
    • @MarkoTopolnik 这是一个很好的观点。不过,我认为实际的细节在这里并不重要。
    猜你喜欢
    • 2017-02-11
    • 2017-10-30
    • 2012-08-06
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2015-08-18
    相关资源
    最近更新 更多