java取内核数_在Java中查找内核数
如何从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中查找内核数相关推荐
- java 取整符号_浅析java中的取整(/)和求余(%)
1.取整运算符 取整从字面意思理解就是被除数到底包含几个除数,也就是能被整除多少次,那么它有哪些需要注意的地方呢?先看下面的两端代码: int a = 10; int b = 3; double c= ...
- java取网页数据_浅析JAVA实现网页取内容
有很多网站提供从其他网站提取新闻甚至是从向翻译网站取内容 由于手头做的网站需要涉及这个方面的内容,所以最近研究了一下 这里把我的一点小心得写给大家 希望大家讨论共同进步 首先我觉得这种功能的实现其实是 ...
- python取列表中位数_在Python中查找列表的中位数
Python 3.4有statistics.median : 返回数字数据的中位数(中间值). 当数据点数为奇数时,返回中间数据点. 当数据点的数量是偶数时,通过取两个中间值的平均值来插值中值: &g ...
- java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at
[http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java jsp取静态常量_获取java静态
Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...
- java 线程组作用_浅析Java中线程组(ThreadGroup类)
一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...
- java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?
二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...
- java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用
Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...
- java 包装类可以被继承_【Java基本功】一文了解Java中继承、封装、多态的细节...
本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...
最新文章
- SAP PM 模块主要配置点
- 吴恩达机器学习笔记 —— 8 正则化
- 在 64 位版本的 Windows 上,如何在 32 位版本的 ASP.NET 1.1 和 64 位版本的 ASP.NET 2.0 之间切换...
- linux ssh命令 带密码,[命令] Linux 命令 sshpass(密码非交互式 ssh)(转载)
- Spring Cloud alibaba版本对应
- LeetCode MySQL 185. 部门工资前三高的所有员工(dense_rank)
- tensorflow 转张量类型为float_TensorFlow是什么?怎么用?终于有人讲明白了
- 怎么给水平线设置高度HTML,设置水平线高度的HTML代码是()。
- 高三计算机教学计划,高三教学计划三篇
- python字典实现好友管理系统简易版
- 用rhino做一个地球_2
- 麦肯锡《金字塔原理》——做一个逻辑清晰的职场人
- 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)
- 借助于栈结构将一个单链表逆置
- T检验:两样本数据的差异性
- 震坤行旗下坤同智能仓储助力「数字龙华」闯关破题
- Python开发一个《真三国无双20th纪念》人物羁绊计算器
- mysql 利用时间查询_利用时间的艺术
- 正版破解软件下载站大全
- 解决安卓约束wrap_content约束失效问题