本文目录导读:

我来为您提供几个Java获取系统信息的实用案例,包括CPU、内存、磁盘、操作系统等信息的获取方法。
基础系统属性获取
import java.util.Properties;
import java.util.Map;
public class SystemInfoDemo {
public static void main(String[] args) {
// 获取系统属性
Properties props = System.getProperties();
System.out.println("===== 系统基本信息 =====");
System.out.println("操作系统名称: " + System.getProperty("os.name"));
System.out.println("操作系统版本: " + System.getProperty("os.version"));
System.out.println("操作系统架构: " + System.getProperty("os.arch"));
System.out.println("Java版本: " + System.getProperty("java.version"));
System.out.println("Java虚拟机版本: " + System.getProperty("java.vm.version"));
System.out.println("Java厂商: " + System.getProperty("java.vendor"));
System.out.println("用户名称: " + System.getProperty("user.name"));
System.out.println("用户主目录: " + System.getProperty("user.home"));
System.out.println("当前工作目录: " + System.getProperty("user.dir"));
System.out.println("文件分隔符: " + System.getProperty("file.separator"));
System.out.println("路径分隔符: " + System.getProperty("path.separator"));
System.out.println("行分隔符: " + System.getProperty("line.separator"));
}
}
内存信息获取
public class MemoryInfoDemo {
public static void main(String[] args) {
// 获取运行时对象
Runtime runtime = Runtime.getRuntime();
// 设置最大内存(可选)
// runtime.maxMemory();
System.out.println("===== 内存信息 =====");
// 最大可用内存
long maxMemory = runtime.maxMemory();
System.out.println("最大可用内存: " + formatSize(maxMemory));
// 已分配内存
long totalMemory = runtime.totalMemory();
System.out.println("已分配内存: " + formatSize(totalMemory));
// 已分配内存中的空闲空间
long freeMemory = runtime.freeMemory();
System.out.println("空闲内存: " + formatSize(freeMemory));
// 已使用内存
long usedMemory = totalMemory - freeMemory;
System.out.println("已使用内存: " + formatSize(usedMemory));
// 内存使用率
double usageRatio = (double) usedMemory / maxMemory * 100;
System.out.printf("内存使用率: %.2f%%%n", usageRatio);
// 可用的处理器核心数
int processors = runtime.availableProcessors();
System.out.println("CPU核心数: " + processors);
}
// 格式化内存大小
private static String formatSize(long bytes) {
if (bytes < 1024) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(1024));
String pre = "KMGTPE".charAt(exp-1) + "";
return String.format("%.2f %sB", bytes / Math.pow(1024, exp), pre);
}
}
使用第三方库获取详细系统信息
1 OSHI库(推荐)
首先添加Maven依赖:
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.4.0</version>
</dependency>
import oshi.SystemInfo;
import oshi.hardware.*;
import oshi.software.os.*;
import java.util.List;
public class OSHISystemInfo {
public static void main(String[] args) {
SystemInfo si = new SystemInfo();
// 获取硬件信息
HardwareAbstractionLayer hal = si.getHardware();
OperatingSystem os = si.getOperatingSystem();
System.out.println("===== 操作系统信息 =====");
System.out.println("操作系统: " + os.toString());
System.out.println("系统版本: " + os.getVersionInfo());
System.out.println("系统架构: " + System.getProperty("os.arch"));
// CPU信息
CentralProcessor processor = hal.getProcessor();
System.out.println("\n===== CPU信息 =====");
System.out.println("CPU型号: " + processor.getProcessorIdentifier().getName());
System.out.println("物理核心数: " + processor.getPhysicalProcessorCount());
System.out.println("逻辑核心数: " + processor.getLogicalProcessorCount());
// CPU使用率
double[] load = processor.getSystemLoadAverage(1);
System.out.println("系统负载: " + load[0]);
// 内存信息
GlobalMemory memory = hal.getMemory();
System.out.println("\n===== 内存信息 =====");
System.out.println("总内存: " + formatBytes(memory.getTotal()));
System.out.println("可用内存: " + formatBytes(memory.getAvailable()));
System.out.println("已使用内存: " + formatBytes(memory.getTotal() - memory.getAvailable()));
// 磁盘信息
List<HWDiskStore> diskStores = hal.getDiskStores();
System.out.println("\n===== 磁盘信息 =====");
for (HWDiskStore disk : diskStores) {
System.out.println("磁盘名称: " + disk.getName());
System.out.println("磁盘大小: " + formatBytes(disk.getSize()));
System.out.println("读取速率: " + disk.getReadBytes() + " bytes");
System.out.println("写入速率: " + disk.getWriteBytes() + " bytes");
System.out.println("---");
}
// 网络信息
List<NetworkIF> networkIFs = hal.getNetworkIFs();
System.out.println("\n===== 网络信息 =====");
for (NetworkIF net : networkIFs) {
System.out.println("网卡名称: " + net.getName());
System.out.println("显示名称: " + net.getDisplayName());
System.out.println("MAC地址: " + net.getMacaddr());
System.out.println("IPv4地址: " + String.join(", ", net.getIPv4addr()));
System.out.println("IPv6地址: " + String.join(", ", net.getIPv6addr()));
System.out.println("---");
}
}
private static String formatBytes(long bytes) {
if (bytes < 1024) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(1024));
String pre = "KMGTPE".charAt(exp-1) + "";
return String.format("%.2f %sB", bytes / Math.pow(1024, exp), pre);
}
}
2 SIGAR库
添加依赖:
<dependency>
<groupId>org.fusesource</groupId>
<artifactId>sigar</artifactId>
<version>1.6.4</version>
</dependency>
import org.hyperic.sigar.*;
import org.hyperic.sigar.cpu.CpuInfo;
import org.hyperic.sigar.cpu.CpuPerc;
import org.hyperic.sigar.mem.Mem;
public class SigarSystemInfo {
private static Sigar sigar;
public static void main(String[] args) {
try {
sigar = new Sigar();
getSystemInfo();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getSystemInfo() throws Exception {
// CPU信息
System.out.println("===== CPU信息 =====");
CpuInfo[] cpuInfos = sigar.getCpuInfoList();
for (CpuInfo cpuInfo : cpuInfos) {
System.out.println("CPU型号: " + cpuInfo.getModel());
System.out.println("主频: " + cpuInfo.getMhz() + " MHz");
System.out.println("核心数: " + cpuInfo.getTotalCores());
}
// CPU使用率
CpuPerc cpuPerc = sigar.getCpuPerc();
System.out.println("CPU使用率: " + (cpuPerc.getCombined() * 100) + "%");
// 内存信息
System.out.println("\n===== 内存信息 =====");
Mem mem = sigar.getMem();
System.out.println("总内存: " + formatSize(mem.getTotal()));
System.out.println("已使用: " + formatSize(mem.getUsed()));
System.out.println("可用: " + formatSize(mem.getFree()));
System.out.println("内存使用率: " + (mem.getUsedPercent()) + "%");
// 交换分区
System.out.println("\n===== 交换分区 =====");
Swap swap = sigar.getSwap();
System.out.println("总交换空间: " + formatSize(swap.getTotal()));
System.out.println("已使用: " + formatSize(swap.getUsed()));
System.out.println("可用: " + formatSize(swap.getFree()));
// 文件系统信息
System.out.println("\n===== 文件系统 =====");
FileSystem[] fileSystems = sigar.getFileSystemList();
for (FileSystem fs : fileSystems) {
System.out.println("文件系统: " + fs.getDevName());
System.out.println("挂载点: " + fs.getDirName());
System.out.println("类型: " + fs.getSysTypeName());
System.out.println("---");
}
}
private static String formatSize(long size) {
if (size < 1024) return size + " B";
int exp = (int) (Math.log(size) / Math.log(1024));
String pre = "KMGTPE".charAt(exp-1) + "";
return String.format("%.2f %sB", size / Math.pow(1024, exp), pre);
}
}
获取网络和运行时信息
import java.net.*;
import java.util.Enumeration;
public class NetworkInfoDemo {
public static void main(String[] args) {
try {
System.out.println("===== 网络信息 =====");
// 获取本机IP地址
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("主机名: " + localHost.getHostName());
System.out.println("本机IP: " + localHost.getHostAddress());
// 获取所有网络接口
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface ni = interfaces.nextElement();
System.out.println("\n网络接口: " + ni.getName());
System.out.println("显示名称: " + ni.getDisplayName());
System.out.println("是否启用: " + ni.isUp());
System.out.println("是否回环: " + ni.isLoopback());
// 获取MAC地址
byte[] mac = ni.getHardwareAddress();
if (mac != null) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println("MAC地址: " + sb.toString());
}
// 获取IP地址
Enumeration<InetAddress> addresses = ni.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
System.out.println("IP地址: " + addr.getHostAddress());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
配置文件示例
import java.io.*;
import java.util.Properties;
public class SystemConfigUtil {
private Properties props;
public SystemConfigUtil(String configPath) {
props = new Properties();
try (InputStream input = new FileInputStream(configPath)) {
props.load(input);
} catch (IOException e) {
e.printStackTrace();
}
}
public void printSystemConfig() {
System.out.println("===== 系统配置信息 =====");
System.out.println("应用名称: " + props.getProperty("app.name"));
System.out.println("应用版本: " + props.getProperty("app.version"));
System.out.println("运行环境: " + props.getProperty("env"));
System.out.println("数据库地址: " + props.getProperty("db.url"));
System.out.println("数据库用户: " + props.getProperty("db.username"));
// 获取环境变量
System.out.println("\n===== 环境变量 =====");
System.getenv().forEach((key, value) -> {
System.out.println(key + ": " + value);
});
}
}
完整的系统监控类
import java.lang.management.*;
import java.util.Map;
public class SystemMonitor {
public static void main(String[] args) throws Exception {
SystemMonitor monitor = new SystemMonitor();
while (true) {
monitor.printSystemStatus();
Thread.sleep(5000); // 每5秒刷新一次
System.out.println("--------------------------------");
}
}
public void printSystemStatus() {
// 内存使用
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
System.out.println("===== 系统状态监控 =====");
System.out.printf("堆内存: 已用 %d MB / 最大 %d MB%n",
heapUsage.getUsed() / 1024 / 1024,
heapUsage.getMax() / 1024 / 1024);
// 线程信息
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
System.out.println("线程数: " + threadBean.getThreadCount());
System.out.println("峰值线程数: " + threadBean.getPeakThreadCount());
System.out.println("守护线程数: " + threadBean.getDaemonThreadCount());
// CPU使用率
OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
System.out.println("CPU核心数: " + osBean.getAvailableProcessors());
System.out.println("系统负载: " + osBean.getSystemLoadAverage());
// 类加载信息
ClassLoadingMXBean classBean = ManagementFactory.getClassLoadingMXBean();
System.out.println("已加载类数: " + classBean.getLoadedClassCount());
System.out.println("已卸载类数: " + classBean.getUnloadedClassCount());
// GC信息
for (GarbageCollectorMXBean gcBean : ManagementFactory.getGarbageCollectorMXBeans()) {
System.out.println("GC " + gcBean.getName() + " 次数: " + gcBean.getCollectionCount());
System.out.println("GC " + gcBean.getName() + " 时间: " + gcBean.getCollectionTime() + "ms");
}
}
}
使用建议
- 简单场景:使用
System.getProperty()和Runtime类 - 详细硬件信息:使用 OSHI 库
- 跨平台兼容:注意不同操作系统的差异
- 性能监控:使用
java.lang.management包 - 生产环境:建议封装成服务,定时采集数据
这些示例覆盖了大多数系统信息获取的需求,您可以根据具体场景选择合适的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播