在Windows上,使用GetSystemInfo并且从返回的SYSTEM_INFO
结构中使用dwNumberOfProcessors
。
这可以从OpenJDK源代码的void os::win32::initialize_system_info()
和int os::active_processor_count()
的os_windows.cpp
中看到。
dwNumberOfProcessors
,从MSDN文档说它报告“当前组中的逻辑处理器的数量”,这意味着超线程会增加报告的CPU数量。
在Linux上,os::active_processor_count()
使用sysconf:
int os::active_processor_count() {
// Linux doesn't yet have a (official) notion of processor sets,
// so just return the number of online processors.
int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
return online_cpus;
}
凡_SC_NPROCESSORS_ONLN
文件说, '处理器的数量目前在线(可用)。'这不受流程的亲和力影响,并且也受超线程的影响。
文档明确指出其值可能会更改的事实使得它不太可能仅查看硬件配置。我的猜测是它返回可以并行运行的Java线程的数量。 – biziclop 2012-02-23 22:33:07
Oracle/Sun过去曾撰写过“乐观”文档。我同意这个意思,但我正在捕鱼。 – bmargulies 2012-02-23 22:33:44