如何从Java代码中找到应用程序可用的内核数量?

#1楼

在安装Cygwin的Windows上可以使用:

System.getenv("NUMBER_OF_PROCESSORS")

#2楼

如果要获取物理核的数量,可以运行cmd和terminal命令,然后解析输出以获取所需的信息。 下面显示了返回物理核心数量的函数。

private int getNumberOfCPUCores() {

OsValidator osValidator = new OsValidator();

String command = "";

if(osValidator.isMac()){

command = "sysctl -n machdep.cpu.core_count";

}else if(osValidator.isUnix()){

command = "lscpu";

}else if(osValidator.isWindows()){

command = "cmd /C WMIC CPU Get /Format:List";

}

Process process = null;

int numberOfCores = 0;

int sockets = 0;

try {

if(osValidator.isMac()){

String[] cmd = { "/bin/sh", "-c", command};

process = Runtime.getRuntime().exec(cmd);

}else{

process = Runtime.getRuntime().exec(command);

}

} catch (IOException e) {

e.printStackTrace();

}

BufferedReader reader = new BufferedReader(

new InputStreamReader(process.getInputStream()));

String line;

try {

while ((line = reader.readLine()) != null) {

if(osValidator.isMac()){

numberOfCores = line.length() > 0 ? Integer.parseInt(line) : 0;

}else if (osValidator.isUnix()) {

if (line.contains("Core(s) per socket:")) {

numberOfCores = Integer.parseInt(line.split("\\s+")[line.split("\\s+").length - 1]);

}

if(line.contains("Socket(s):")){

sockets = Integer.parseInt(line.split("\\s+")[line.split("\\s+").length - 1]);

}

} else if (osValidator.isWindows()) {

if (line.contains("NumberOfCores")) {

numberOfCores = Integer.parseInt(line.split("=")[1]);

}

}

}

} catch (IOException e) {

e.printStackTrace();

}

if(osValidator.isUnix()){

return numberOfCores * sockets;

}

return numberOfCores;

}

OSValidator类:

public class OSValidator {

private static String OS = System.getProperty("os.name").toLowerCase();

public static void main(String[] args) {

System.out.println(OS);

if (isWindows()) {

System.out.println("This is Windows");

} else if (isMac()) {

System.out.println("This is Mac");

} else if (isUnix()) {

System.out.println("This is Unix or Linux");

} else if (isSolaris()) {

System.out.println("This is Solaris");

} else {

System.out.println("Your OS is not support!!");

}

}

public static boolean isWindows() {

return (OS.indexOf("win") >= 0);

}

public static boolean isMac() {

return (OS.indexOf("mac") >= 0);

}

public static boolean isUnix() {

return (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 );

}

public static boolean isSolaris() {

return (OS.indexOf("sunos") >= 0);

}

public static String getOS(){

if (isWindows()) {

return "win";

} else if (isMac()) {

return "osx";

} else if (isUnix()) {

return "uni";

} else if (isSolaris()) {

return "sol";

} else {

return "err";

}

}

}

#3楼

int cores = Runtime.getRuntime().availableProcessors();

如果cores少于一个,则可能是处理器即将死机,或者JVM中存在严重的错误,或者Universe即将崩溃。

#4楼

这是找出CPU内核数量(以及许多其他信息)的另一种方法,但是此代码需要附加的依赖关系:

SystemInfo systemInfo = new SystemInfo();

HardwareAbstractionLayer hardwareAbstractionLayer = systemInfo.getHardware();

CentralProcessor centralProcessor = hardwareAbstractionLayer.getProcessor();

获取可用于处理的逻辑CPU的数量:

centralProcessor.getLogicalProcessorCount();

#5楼

public class CPUCores {

public static void main(String[] args) {

int processors = Runtime.getRuntime().availableProcessors();

System.out.println("CPU cores: " + processors);

}

}

输出CPU内核:8

请注意,此数字是可用于Java应用程序的内核总数。

参考Java Doc API

超线程

java取内核数_在Java中查找内核数相关推荐

  1. java 取整符号_浅析java中的取整(/)和求余(%)

    1.取整运算符 取整从字面意思理解就是被除数到底包含几个除数,也就是能被整除多少次,那么它有哪些需要注意的地方呢?先看下面的两端代码: int a = 10; int b = 3; double c= ...

  2. java取网页数据_浅析JAVA实现网页取内容

    有很多网站提供从其他网站提取新闻甚至是从向翻译网站取内容 由于手头做的网站需要涉及这个方面的内容,所以最近研究了一下 这里把我的一点小心得写给大家 希望大家讨论共同进步 首先我觉得这种功能的实现其实是 ...

  3. python取列表中位数_在Python中查找列表的中位数

    Python 3.4有statistics.median : 返回数字数据的中位数(中间值). 当数据点数为奇数时,返回中间数据点. 当数据点的数量是偶数时,通过取两个中间值的平均值来插值中值: &g ...

  4. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  5. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  6. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

  7. java 线程组作用_浅析Java中线程组(ThreadGroup类)

    一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...

  8. java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?

    二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...

  9. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  10. java 包装类可以被继承_【Java基本功】一文了解Java中继承、封装、多态的细节...

    本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...

最新文章

  1. SAP PM 模块主要配置点
  2. 吴恩达机器学习笔记 —— 8 正则化
  3. 在 64 位版本的 Windows 上,如何在 32 位版本的 ASP.NET 1.1 和 64 位版本的 ASP.NET 2.0 之间切换...
  4. linux ssh命令 带密码,[命令] Linux 命令 sshpass(密码非交互式 ssh)(转载)
  5. Spring Cloud alibaba版本对应
  6. LeetCode MySQL 185. 部门工资前三高的所有员工(dense_rank)
  7. tensorflow 转张量类型为float_TensorFlow是什么?怎么用?终于有人讲明白了
  8. 怎么给水平线设置高度HTML,设置水平线高度的HTML代码是()。
  9. 高三计算机教学计划,高三教学计划三篇
  10. python字典实现好友管理系统简易版
  11. 用rhino做一个地球_2
  12. 麦肯锡《金字塔原理》——做一个逻辑清晰的职场人
  13. 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)
  14. 借助于栈结构将一个单链表逆置
  15. T检验:两样本数据的差异性
  16. 震坤行旗下坤同智能仓储助力「数字龙华」闯关破题
  17. Python开发一个《真三国无双20th纪念》人物羁绊计算器
  18. mysql 利用时间查询_利用时间的艺术
  19. 正版破解软件下载站大全
  20. 解决安卓约束wrap_content约束失效问题

热门文章

  1. 获取对话框当前cfont_自绘对话框
  2. linux共享xp打印机驱动下载,给debian共享winxp下的打印机
  3. 主流深度学习框架对比(TensorFlow、Keras、MXNet、PyTorch)
  4. Anaconda2安装时出现问题
  5. FCN网络的训练——以SIFT-Flow 数据集为例
  6. VS2013动态库文件的创建及其使用详解
  7. 那几个题(没懂的地方留言)
  8. webservice gsoap 小记
  9. 分享10个Android游戏源码,要的赶紧来哈
  10. 一个通过数据库镜像实现SPS 2003门户快速备份与恢复的操作手册