在Java中有没有办法找出安装了多少CPU(或内核)?
我想对多线程程序进行一些调整 如果我知道有多少线程可以真正并行工作,我可以使程序更加有效在Java中有没有办法找出安装了多少CPU(或内核)?,java,runtime,system,Java,Runtime,System,我想对多线程程序进行一些调整 如果我知道有多少线程可以真正并行工作,我可以使程序更加有效 Java中有没有办法获取这些信息 在windows上肯定是。带有kernel32.dll的JNA。使用GetNativeSystemInfo调用中的SYSTEM\u INFO结构。还有dwNumberOfProcessors 我相信这将提供实际安装的处理器数量,而不是可用的数量您可以使用 Runtime.getRuntime().availableProcessors() 但它更多的是一个最佳猜测,甚至被
Java中有没有办法获取这些信息 在windows上肯定是。带有kernel32.dll的JNA。使用
GetNativeSystemInfo
调用中的SYSTEM\u INFO
结构。还有dwNumberOfProcessors
我相信这将提供实际安装的处理器数量,而不是可用的数量代码>您可以使用
Runtime.getRuntime().availableProcessors()
但它更多的是一个最佳猜测,甚至被API提到
此值可能在虚拟机的特定调用期间更改
机器。对可用资源数量敏感的应用程序
因此,处理器应偶尔轮询此属性并进行调整
它们的资源使用是适当的
(代码片段能说出1000个单词)怎么样
关于availableProcessors()方法的一个注意事项是,它不区分物理CPU和虚拟CPU。e、 例如,如果您的计算机上启用了超线程,那么这个数字将是物理CPU数量的两倍(这有点令人沮丧)。不幸的是,在纯java中无法确定真实和虚拟CPU。这是一个很好的问题!谢谢你的提问,这是一个相当困难(而且不可移植)的方法。同意,尽管它给出了处理器的数量。我只记得以前使用SYSTEM_INFO结构用于不同目的时的字段。+1-注意:这不会告诉应用程序安装了多少处理器/内核。但它确实告诉它JVM有多少可用。。。这正是OP真正需要的。@Stephen C:是的,我需要的正是这个。但是,你能给我一点启发吗:什么时候JVM可能无法使用所有处理器?@Roman:我想当操作系统为其他进程保留一些内核/处理器时,JVM将无法使用它们。
public class Main {
/**
* Displays the number of processors available in the Java Virtual Machine
*/
public void displayAvailableProcessors() {
Runtime runtime = Runtime.getRuntime();
int nrOfProcessors = runtime.availableProcessors();
System.out.println("Number of processors available to the Java Virtual Machine: " + nrOfProcessors);
}
public static void main(String[] args) {
new Main().displayAvailableProcessors();
}
}