JAVA如何獲取jvm和操作系統(tǒng)相關(guān)信息
什么是JVM
JVM是JavaVirtualMachine(Java虛擬機)的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。 主流虛擬機
背景
今日搬磚??時需要獲取系統(tǒng)運行時間、版本號等相關(guān)信息,使用Java自帶的類進行獲取系統(tǒng)運行的相關(guān)信息,在這整理記錄分享一下,感興趣的小伙伴可以自己嘗試嘗試。
Jvm
首先獲取jvm相關(guān)信息,包含jvm的名稱、版本號、啟動時間、運行時間、環(huán)境變量、進程id等等
public class Test {
public static void main(String[] args) {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
// jvmName
System.out.printf("jvmName: %s %n", runtimeMXBean.getVmName());
// jvmVersion
System.out.printf("jvmVersion: %s %n", runtimeMXBean.getVmVersion());
// jvmVendor
System.out.printf("jvmVendor: %s %n", runtimeMXBean.getVmVendor());
// startTime 使用hutool中DateUtil進行轉(zhuǎn)換
long startTime = runtimeMXBean.getStartTime();
System.out.printf("startTime: %s %n", DateUtil.date(startTime).toString());
// updateTime
long uptime = runtimeMXBean.getUptime();
System.out.printf("updateTime: %s %n", DateUtil.formatBetween(uptime, BetweenFormater.Level.SECOND));
// classPath
System.out.printf("classPath: %s %n", runtimeMXBean.getClassPath());
// systemProperties
System.out.printf("jvmName: %s %n", runtimeMXBean.getSystemProperties());
// bootClassPath
System.out.printf("bootClassPath: %s %n", runtimeMXBean.getBootClassPath());
// processId
System.out.printf("processId: %s %n", runtimeMXBean.getName().split("@")[0]);
}
}
還可以獲取JVM內(nèi)存相關(guān)信息,例如堆內(nèi)存。
public class Test {
public static void main(String[] args) {
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
// heapMemoryUsed
System.out.printf("heapMemoryUsed: %d MB %n", heapMemoryUsage.getUsed()/1024/1024);
// heapMemoryMax
System.out.printf("heapMemoryMax: %d MB %n", heapMemoryUsage.getMax()/1024/1024);
// heapMemoryCommitted
System.out.printf("heapMemoryCommitted: %d MB %n", heapMemoryUsage.getCommitted()/1024/1024);
MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();
// nonHeapMemoryUsed
System.out.printf("nonHeapMemoryUsed: %d MB %n", nonHeapMemoryUsage.getUsed()/1024/1024);
// nonHeapMemoryMax
System.out.printf("nonHeapMemoryMax: %d MB %n", nonHeapMemoryUsage.getMax()/1024/1024);
// nonHeapMemoryCommitted
System.out.printf("nonHeapMemoryCommitted: %d MB %n", nonHeapMemoryUsage.getCommitted()/1024/1024);
}
}
獲取JDK相關(guān)信息。包含jdk的版本、安裝路徑、當前運行jar包路徑、運行jar文件名等。
public class Test {
public static void main(String[] args) {
// jdkVersion
System.out.printf("jdkVersion: %s %n", System.getProperty("java.version"));
// java_home
System.out.printf("java_home: %s %n", System.getProperty("java.home"));
// jar包路徑
String path = System.getProperty("java.class.path");
int firstIndex = path.lastIndexOf(System.getProperty("path.separator")) + 1;
int lastIndex = path.lastIndexOf(File.separator) + 1;
String jarPath = path.substring(firstIndex, lastIndex);
System.out.printf("jarPath: %s %n", jarPath);
// 當前運行jar文件名
String jarName = path.substring(lastIndex);
System.out.printf("jarName: %s %n", jarName);
}
}
獲取java虛擬機線程信息,包含線程的阻塞時間、次數(shù)、線程的堆棧信息等等。
public class Test {
public static void main(String[] args) {
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
// ThreadCount
System.out.printf("ThreadCount: %d %n", threadMXBean.getThreadCount());
// AllThreadIds
System.out.printf("AllThreadIds: %s %n", threadMXBean.getAllThreadIds());
// TotalStartedThread
System.out.printf("TotalStartedThread: %d %n", threadMXBean.getTotalStartedThreadCount());
// DaemonThread
System.out.printf("DaemonThread: %d %n", threadMXBean.getDaemonThreadCount());
// PeakThread
System.out.printf("PeakThread: %d %n", threadMXBean.getPeakThreadCount());
// ThreadInfo
System.out.printf("ThreadInfo: %s %n", threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds()));
}
}
獲取java虛擬機類加載相關(guān)信息。
public class Test {
public static void main(String[] args) {
ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
// LoadedClassCount
System.out.printf("LoadedClassCount: %d %n", classLoadingMXBean.getLoadedClassCount());
// TotalLoadedClassCount
System.out.printf("TotalLoadedClassCount: %d %n", classLoadingMXBean.getTotalLoadedClassCount());
// UnloadedClassCount
System.out.printf("UnloadedClassCount: %d %n", classLoadingMXBean.getUnloadedClassCount());
}
}
操作系統(tǒng)
獲取操作系統(tǒng)以及主機硬件信息,包含系統(tǒng)名稱、版本、物理內(nèi)存、可用內(nèi)存等等。
public class Test {
public static void main(String[] args) {
// 系統(tǒng)版本
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactoryHelper.getOperatingSystemMXBean();
// osName
System.out.printf("osName: %s %n", operatingSystemMXBean.getName());
// Arch
System.out.printf("Arch: %s %n", operatingSystemMXBean.getArch());
// Version
System.out.printf("Version: %s %n", operatingSystemMXBean.getVersion());
// 物理內(nèi)存
long totalPhysicalMemorySize = operatingSystemMXBean.getTotalPhysicalMemorySize()/1024/1024/1024;
// totalPhysicalMemorySize
System.out.printf("totalPhysicalMemorySize: %d GB %n", totalPhysicalMemorySize);
}
}到此這篇關(guān)于JAVA獲取jvm和操作系統(tǒng)相關(guān)信息的文章就介紹到這了,更多相關(guān)JAVA獲取jvm信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用SpringBoot簡單實現(xiàn)一個蘋果支付的場景
這篇文章主要為大家詳細介紹了如何在Spring?Boot項目中集成Apple?Pay功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
Spring事務(wù)管理之如何處理刪除操作與事務(wù)回滾
在實際開發(fā)中,事務(wù)管理是保證數(shù)據(jù)一致性的核心機制之一,本文將通過一個實際案例,詳細分析Spring事務(wù)中的刪除操作與回滾機制,并提供優(yōu)化方案,需要的可以參考下2025-04-04
SpringBoot整合DeepSeek實現(xiàn)AI對話功能
本文介紹了如何在SpringBoot項目中整合DeepSeek API和本地私有化部署DeepSeekR1模型,通過SpringAI框架簡化了人工智能模型的集成,感興趣的小伙伴跟著小編一起來看看吧2025-02-02
mybatis新增save結(jié)束后自動返回主鍵id詳解
這篇文章主要介紹了mybatis新增save結(jié)束后自動返回主鍵id詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

