最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java一鍵獲取(CPU、內(nèi)存、硬盤、操作系統(tǒng))系統(tǒng)信息

 更新時間:2026年03月15日 08:27:30   作者:Full Stack Developme  
這篇文章主要為大家詳細介紹了如何使用Java一鍵獲取CPU、內(nèi)存、硬盤、操作系統(tǒng)等系統(tǒng)信息,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

Java 中獲取系統(tǒng)信息(CPU、內(nèi)存、硬盤、操作系統(tǒng))主要有以下幾種方式:

  • 使用 Java 原生 APIjava.lang.management 包)
  • 使用第三方庫(如 OSHI)
  • 使用 Runtime 執(zhí)行系統(tǒng)命令

下面詳細介紹每種方法。

一、使用 Java 原生 API

Java 自帶的 ManagementFactory 可以獲取部分系統(tǒng)信息,但功能有限。

1. 獲取操作系統(tǒng)信息

import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;

public class SystemInfo {
    public static void main(String[] args) {
        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
        
        System.out.println("操作系統(tǒng)名稱: " + osBean.getName());
        System.out.println("操作系統(tǒng)版本: " + osBean.getVersion());
        System.out.println("操作系統(tǒng)架構(gòu): " + osBean.getArch());
        System.out.println("可用處理器核心數(shù): " + osBean.getAvailableProcessors());
        System.out.println("系統(tǒng)平均負載: " + osBean.getSystemLoadAverage());
    }
}

2. 獲取內(nèi)存信息(有限)

import com.sun.management.OperatingSystemMXBean;
import java.lang.management.ManagementFactory;

public class MemoryInfo {
    public static void main(String[] args) {
        OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
        
        // 獲取總物理內(nèi)存(字節(jié))
        long totalMemory = osBean.getTotalPhysicalMemorySize();
        // 獲取可用物理內(nèi)存(字節(jié))
        long freeMemory = osBean.getFreePhysicalMemorySize();
        
        System.out.println("總物理內(nèi)存: " + formatBytes(totalMemory));
        System.out.println("可用物理內(nèi)存: " + formatBytes(freeMemory));
        System.out.println("已用物理內(nèi)存: " + formatBytes(totalMemory - freeMemory));
    }
    
    private static String formatBytes(long bytes) {
        return String.format("%.2f GB", bytes / (1024.0 * 1024.0 * 1024.0));
    }
}

注意com.sun.management.OperatingSystemMXBean 不是標準 API,在不同 JDK 實現(xiàn)中可能不可用。

二、使用 OSHI 庫(推薦)

OSHI(Operating System and Hardware Information)是一個跨平臺的 Java 庫,功能最全面。

1. 添加 Maven 依賴

<dependency>
    <groupId>com.github.oshi</groupId>
    <artifactId>oshi-core</artifactId>
    <version>6.4.0</version>
</dependency>

2. 獲取 CPU 信息

import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.HardwareAbstractionLayer;

public class CpuInfo {
    public static void main(String[] args) {
        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        CentralProcessor cpu = hal.getProcessor();
        
        System.out.println("CPU 名稱: " + cpu.getProcessorIdentifier().getName());
        System.out.println("CPU 物理核心數(shù): " + cpu.getPhysicalProcessorCount());
        System.out.println("CPU 邏輯核心數(shù): " + cpu.getLogicalProcessorCount());
        System.out.println("CPU 最大頻率: " + cpu.getMaxFreq() / 1_000_000 + " MHz");
        
        // 獲取 CPU 使用率
        long[] prevTicks = cpu.getSystemCpuLoadTicks();
        try {
            Thread.sleep(1000); // 等待1秒計算使用率
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        double cpuLoad = cpu.getSystemCpuLoadBetweenTicks(prevTicks) * 100;
        System.out.printf("CPU 使用率: %.2f%%\n", cpuLoad);
    }
}

3. 獲取內(nèi)存信息

import oshi.SystemInfo;
import oshi.hardware.GlobalMemory;
import oshi.hardware.HardwareAbstractionLayer;

public class MemoryInfo {
    public static void main(String[] args) {
        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        GlobalMemory memory = hal.getMemory();
        
        long total = memory.getTotal();
        long available = memory.getAvailable();
        
        System.out.println("總內(nèi)存: " + formatBytes(total));
        System.out.println("可用內(nèi)存: " + formatBytes(available));
        System.out.println("已用內(nèi)存: " + formatBytes(total - available));
        System.out.println("內(nèi)存使用率: " + 
            String.format("%.2f%%", (total - available) * 100.0 / total));
        
        // 獲取交換空間(虛擬內(nèi)存)
        System.out.println("總交換空間: " + formatBytes(memory.getVirtualMemory().getSwapTotal()));
        System.out.println("可用交換空間: " + formatBytes(memory.getVirtualMemory().getSwapFree()));
    }
    
    private static String formatBytes(long bytes) {
        return String.format("%.2f GB", bytes / (1024.0 * 1024.0 * 1024.0));
    }
}

4. 獲取硬盤信息

import oshi.SystemInfo;
import oshi.hardware.HWDiskStore;
import oshi.hardware.HardwareAbstractionLayer;

import java.util.List;

public class DiskInfo {
    public static void main(String[] args) {
        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        List<HWDiskStore> diskStores = hal.getDiskStores();
        
        for (HWDiskStore disk : diskStores) {
            System.out.println("硬盤名稱: " + disk.getName());
            System.out.println("硬盤型號: " + disk.getModel());
            System.out.println("硬盤序列號: " + disk.getSerial());
            System.out.println("硬盤大小: " + formatBytes(disk.getSize()));
            System.out.println("讀取次數(shù): " + disk.getReads());
            System.out.println("寫入次數(shù): " + disk.getWrites());
            System.out.println("讀取字節(jié)數(shù): " + formatBytes(disk.getReadBytes()));
            System.out.println("寫入字節(jié)數(shù): " + formatBytes(disk.getWriteBytes()));
            System.out.println("----------------------------");
        }
        
        // 獲取文件系統(tǒng)信息(分區(qū))
        hal.getFileSystem().getFileStores().forEach(fileStore -> {
            System.out.println("分區(qū): " + fileStore.getVolume());
            System.out.println("掛載點: " + fileStore.getMount());
            System.out.println("總空間: " + formatBytes(fileStore.getTotalSpace()));
            System.out.println("可用空間: " + formatBytes(fileStore.getUsableSpace()));
            System.out.println("已用空間: " + formatBytes(fileStore.getTotalSpace() - fileStore.getUsableSpace()));
            System.out.println("----------------------------");
        });
    }
    
    private static String formatBytes(long bytes) {
        return String.format("%.2f GB", bytes / (1024.0 * 1024.0 * 1024.0));
    }
}

5. 獲取操作系統(tǒng)信息

import oshi.SystemInfo;
import oshi.software.os.OperatingSystem;

public class OsInfo {
    public static void main(String[] args) {
        SystemInfo si = new SystemInfo();
        OperatingSystem os = si.getOperatingSystem();
        
        System.out.println("操作系統(tǒng): " + os.toString());
        System.out.println("操作系統(tǒng)家族: " + os.getFamily());
        System.out.println("操作系統(tǒng)制造商: " + os.getManufacturer());
        System.out.println("操作系統(tǒng)版本: " + os.getVersionInfo());
        System.out.println("進程數(shù): " + os.getProcessCount());
        System.out.println("線程數(shù): " + os.getThreadCount());
        System.out.println("系統(tǒng)啟動時間: " + new java.util.Date(os.getSystemBootTime() * 1000));
    }
}

6. 完整示例:獲取所有信息

import oshi.SystemInfo;
import oshi.hardware.*;
import oshi.software.os.OperatingSystem;

public class AllSystemInfo {
    public static void main(String[] args) {
        SystemInfo si = new SystemInfo();
        HardwareAbstractionLayer hal = si.getHardware();
        OperatingSystem os = si.getOperatingSystem();
        
        System.out.println("========== 操作系統(tǒng)信息 ==========");
        System.out.println("操作系統(tǒng): " + os.toString());
        System.out.println("系統(tǒng)啟動時間: " + new java.util.Date(os.getSystemBootTime() * 1000));
        
        System.out.println("\n========== CPU信息 ==========");
        CentralProcessor cpu = hal.getProcessor();
        System.out.println("CPU: " + cpu.getProcessorIdentifier().getName());
        System.out.println("物理核心: " + cpu.getPhysicalProcessorCount());
        System.out.println("邏輯核心: " + cpu.getLogicalProcessorCount());
        
        // CPU 使用率
        long[] prevTicks = cpu.getSystemCpuLoadTicks();
        try { Thread.sleep(1000); } catch (InterruptedException e) { }
        System.out.printf("CPU使用率: %.2f%%\n", cpu.getSystemCpuLoadBetweenTicks(prevTicks) * 100);
        
        System.out.println("\n========== 內(nèi)存信息 ==========");
        GlobalMemory memory = hal.getMemory();
        long totalMem = memory.getTotal();
        long availMem = memory.getAvailable();
        System.out.println("總內(nèi)存: " + formatBytes(totalMem));
        System.out.println("可用內(nèi)存: " + formatBytes(availMem));
        System.out.printf("內(nèi)存使用率: %.2f%%\n", (totalMem - availMem) * 100.0 / totalMem);
        
        System.out.println("\n========== 硬盤信息 ==========");
        hal.getFileSystem().getFileStores().forEach(fs -> {
            System.out.println("分區(qū): " + fs.getMount());
            System.out.println("總空間: " + formatBytes(fs.getTotalSpace()));
            System.out.println("可用空間: " + formatBytes(fs.getUsableSpace()));
            System.out.println("-------------------");
        });
    }
    
    private static String formatBytes(long bytes) {
        String[] units = {"B", "KB", "MB", "GB", "TB"};
        int unitIndex = 0;
        double size = bytes;
        while (size >= 1024 && unitIndex < units.length - 1) {
            size /= 1024;
            unitIndex++;
        }
        return String.format("%.2f %s", size, units[unitIndex]);
    }
}

三、使用 Runtime 執(zhí)行系統(tǒng)命令

如果不想引入第三方庫,可以通過執(zhí)行系統(tǒng)命令來獲取信息。

Windows 示例

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CommandInfo {
    public static void main(String[] args) {
        // 獲取 CPU 信息
        executeCommand("wmic cpu get name");
        
        // 獲取內(nèi)存信息
        executeCommand("wmic memorychip get capacity");
        
        // 獲取硬盤信息
        executeCommand("wmic logicaldisk get size,freespace,caption");
    }
    
    private static void executeCommand(String command) {
        try {
            Process process = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream(), "GBK"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Linux 示例

// CPU 信息
executeCommand("cat /proc/cpuinfo | grep 'model name' | head -1");

// 內(nèi)存信息
executeCommand("cat /proc/meminfo | grep MemTotal");

// 硬盤信息
executeCommand("df -h");

總結(jié)

方法優(yōu)點缺點
Java 原生 API無需額外依賴信息有限,部分 API 非標準
OSHI 庫跨平臺,信息全面,易于使用需要引入第三方依賴
執(zhí)行系統(tǒng)命令能獲取任意信息平臺相關(guān),解析復雜,性能較差

推薦使用 OSHI 庫,它封裝了底層細節(jié),提供了統(tǒng)一的跨平臺 API,能獲取最全面的系統(tǒng)信息。

到此這篇關(guān)于Java一鍵獲取(CPU、內(nèi)存、硬盤、操作系統(tǒng))系統(tǒng)信息的文章就介紹到這了,更多相關(guān)Java獲取系統(tǒng)信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?MVC全局異常處理實戰(zhàn)詳細指南

    Spring?MVC全局異常處理實戰(zhàn)詳細指南

    在Spring MVC框架中統(tǒng)一異常處理是一項重要的功能,它能夠幫助開發(fā)者集中管理并標準化系統(tǒng)中的異常處理流程,提高代碼的可讀性和可維護性,這篇文章主要介紹了Spring?MVC全局異常處理實戰(zhàn)的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • Java中的接口及其應用場景解讀

    Java中的接口及其應用場景解讀

    這篇文章主要介紹了Java中的接口及其應用場景解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringCloud之服務注冊與發(fā)現(xiàn)Spring Cloud Eureka實例代碼

    SpringCloud之服務注冊與發(fā)現(xiàn)Spring Cloud Eureka實例代碼

    這篇文章主要介紹了SpringCloud之服務注冊與發(fā)現(xiàn)Spring Cloud Eureka實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • spring-session簡介及實現(xiàn)原理源碼分析

    spring-session簡介及實現(xiàn)原理源碼分析

    這篇文章主要介紹了spring-session簡介及實現(xiàn)原理源碼分析,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java程序順序結(jié)構(gòu)中邏輯控制語句詳解流程

    Java程序順序結(jié)構(gòu)中邏輯控制語句詳解流程

    在程序開發(fā)的過程之中一共會存在有三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行
    2021-10-10
  • 2020Mac M1安裝jdk和IDEA的詳細方法

    2020Mac M1安裝jdk和IDEA的詳細方法

    這篇文章主要介紹了2020Mac M1安裝jdk和IDEA的詳細方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • springboot-mongodb的多數(shù)據(jù)源配置的方法步驟

    springboot-mongodb的多數(shù)據(jù)源配置的方法步驟

    這篇文章主要介紹了springboot-mongodb的多數(shù)據(jù)源配置的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Maven Profile多環(huán)境構(gòu)建實戰(zhàn)指南

    Maven Profile多環(huán)境構(gòu)建實戰(zhàn)指南

    在現(xiàn)代企業(yè)級Java項目開發(fā)中,面對開發(fā)(dev)、測試(test)、預發(fā)布(staging)、生產(chǎn)(prod)等多套環(huán)境的差異化配置管理,本文將從實戰(zhàn)角度深入剖析Maven Profile的多環(huán)境構(gòu)建體系,需要的朋友可以參考下
    2025-05-05
  • java基本教程之常用的實現(xiàn)多線程的兩種方式 java多線程教程

    java基本教程之常用的實現(xiàn)多線程的兩種方式 java多線程教程

    下面開始學習“常用的實現(xiàn)多線程的2種方式”:Thread 和 Runnable。之所以說是常用的,是因為通過還可以通過java.util.concurrent包中的線程池來實現(xiàn)多線程
    2014-01-01
  • POI導出之Excel實現(xiàn)單元格的背景色填充問題

    POI導出之Excel實現(xiàn)單元格的背景色填充問題

    這篇文章主要介紹了POI導出之Excel實現(xiàn)單元格的背景色填充問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

锦州市| 琼海市| 隆安县| 屏东县| 彭水| 大足县| 长沙县| 城固县| 延安市| 连山| 阿拉尔市| 上高县| 永修县| 土默特右旗| 北碚区| 车险| 肥东县| 汝南县| 绩溪县| 顺平县| 鹰潭市| 和田县| 罗江县| 出国| 霸州市| 三河市| 湖南省| 沾化县| 海门市| 修武县| 大邑县| 响水县| 东乡县| 随州市| 通许县| 巴林右旗| 六盘水市| 吴忠市| 喀喇沁旗| 龙岩市| 黎平县|