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的版本、安裝路徑、當(dāng)前運行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); // 當(dāng)前運行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)文章
SpringCloud Gateway自動裝配實現(xiàn)流程詳解
Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡單有效的、統(tǒng)一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系中的網(wǎng)關(guān),它不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全、監(jiān)控/埋點和限流等2022-10-10詳解在Spring中如何使用AspectJ來實現(xiàn)AOP
這篇文章主要介紹了詳解在Spring中如何使用AspectJ來實現(xiàn)AOP,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06SpringBoot下RabbitMq實現(xiàn)定時任務(wù)
這篇文章主要為大家詳細(xì)介紹了SpringBoot下RabbitMq實現(xiàn)定時任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11關(guān)于SpringBoot+Mybatis報MapperScan.factoryBean()問題
解決SpringBoot+Mybatis中的MapperScan.factoryBean()問題,讓你的項目運行更順暢!本指南將帶你一步步解決這個問題,讓你的開發(fā)過程更加高效,不要錯過這個實用指南,快來一探究竟吧!2024-02-02