java 获取os发行商_java 利用ManagementFactory获取jvm,os的一些信息--转

该博客展示了如何利用Java的ManagementFactory获取操作系统(包括名称、版本、架构、可用核心数、内存信息等)和JVM的详细信息,如编译、类加载、运行时、内存管理、垃圾回收、内存池和线程状态等。
摘要由CSDN通过智能技术生成

packagecom.fei;importjava.lang.management.ClassLoadingMXBean;importjava.lang.management.CompilationMXBean;importjava.lang.management.GarbageCollectorMXBean;importjava.lang.management.ManagementFactory;importjava.lang.management.MemoryMXBean;importjava.lang.management.MemoryManagerMXBean;importjava.lang.management.MemoryPoolMXBean;importjava.lang.management.MemoryUsage;importjava.lang.management.OperatingSystemMXBean;importjava.lang.management.RuntimeMXBean;importjava.lang.management.ThreadInfo;importjava.lang.management.ThreadMXBean;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.Arrays;importjava.util.List;public classJvmInfo {static final long MB = 1024 * 1024;public static voidmain(String[] args) {//打印系统信息

System.out.println("===========打印系统信息==========");

printOperatingSystemInfo();//打印编译信息

System.out.println("===========打印编译信息==========");

printCompilationInfo();//打印类加载信息

System.out.println("===========打印类加载信息==========");

printClassLoadingInfo();//打印运行时信息

System.out.println("===========打印运行时信息==========");

printRuntimeInfo();//打印内存管理器信息

System.out.println("===========打印内存管理器信息==========");

printMemoryManagerInfo();//打印垃圾回收信息

System.out.println("===========打印垃圾回收信息==========");

printGarbageCollectorInfo();//打印vm内存

System.out.println("===========打印vm内存信息==========");

printMemoryInfo();//打印vm各内存区信息

System.out.println("===========打印vm各内存区信息==========");

printMemoryPoolInfo();//打印线程信息

System.out.println("===========打印线程==========");

printThreadInfo();

}private static voidprintOperatingSystemInfo(){

OperatingSystemMXBean system=ManagementFactory.getOperatingSystemMXBean();//相当于System.getProperty("os.name").

System.out.println("系统名称:"+system.getName());//相当于System.getProperty("os.version").

System.out.println("系统版本:"+system.getVersion());//相当于System.getProperty("os.arch").

System.out.println("操作系统的架构:"+system.getArch());//相当于 Runtime.availableProcessors()

System.out.println("可用的内核数:"+system.getAvailableProcessors());if(isSunOsMBean(system)){long totalPhysicalMemory = getLongFromOperatingSystem(system,"getTotalPhysicalMemorySize");long freePhysicalMemory = getLongFromOperatingSystem(system, "getFreePhysicalMemorySize");long usedPhysicalMemorySize =totalPhysicalMemory -freePhysicalMemory;

System.out.println("总物理内存(M):"+totalPhysicalMemory/MB);

System.out.println("已用物理内存(M):"+usedPhysicalMemorySize/MB);

System.out.println("剩余物理内存(M):"+freePhysicalMemory/MB);long totalSwapSpaceSize = getLongFromOperatingSystem(system, "getTotalSwapSpaceSize");long freeSwapSpaceSize = getLongFromOperatingSystem(system, "getFreeSwapSpaceSize");long usedSwapSpaceSize = totalSwapSpaceSize -freeSwapSpaceSize;

System.out.println("总交换空间(M):"+totalSwapSpaceSize/MB);

System.out.println("已用交换空间(M):"+usedSwapSpaceSize/MB);

System.out.println("剩余交换空间(M):"+freeSwapSpaceSize/MB);

}

}private static longgetLongFromOperatingSystem(OperatingSystemMXBean operatingSystem, String methodName) {try{final Method method =operatingSystem.getClass().getMethod(methodName,

(Class>[]) null);

method.setAccessible(true);return (Long) method.invoke(operatingSystem, (Object[]) null);

}catch (finalInvocationTargetException e) {if (e.getCause() instanceofError) {throw(Error) e.getCause();

}else if (e.getCause() instanceofRuntimeException) {throw(RuntimeException) e.getCause();

}throw newIllegalStateException(e.getCause());

}catch (finalNoSuchMethodException e) {throw newIllegalArgumentException(e);

}catch (finalIllegalAccessException e) {throw newIllegalStateException(e);

}

}private static voidprintCompilationInfo(){

CompilationMXBean compilation=ManagementFactory.getCompilationMXBean();

System.out.println("JIT编译器名称:"+compilation.getName());//判断jvm是否支持编译时间的监控

if(compilation.isCompilationTimeMonitoringSupported()){

System.out.println("总编译时间:"+compilation.getTotalCompilationTime()+"秒");

}

}private static voidprintClassLoadingInfo(){

ClassLoadingMXBean classLoad=ManagementFactory.getClassLoadingMXBean();

System.out.println("已加载类总数:"+classLoad.getTotalLoadedClassCount());

System.out.println("已加载当前类:"+classLoad.getLoadedClassCount());

System.out.println("已卸载类总数:"+classLoad.getUnloadedClassCount());

}private static voidprintRuntimeInfo(){

RuntimeMXBean runtime=ManagementFactory.getRuntimeMXBean();

System.out.println("进程PID="+runtime.getName().split("@")[0]);

System.out.println("jvm规范名称:"+runtime.getSpecName());

System.out.println("jvm规范运营商:"+runtime.getSpecVendor());

System.out.println("jvm规范版本:"+runtime.getSpecVersion());//返回虚拟机在毫秒内的开始时间。该方法返回了虚拟机启动时的近似时间

System.out.println("jvm启动时间(毫秒):"+runtime.getStartTime());//相当于System.getProperties

System.out.println("获取System.properties:"+runtime.getSystemProperties());

System.out.println("jvm正常运行时间(毫秒):"+runtime.getUptime());//相当于System.getProperty("java.vm.name").

System.out.println("jvm名称:"+runtime.getVmName());//相当于System.getProperty("java.vm.vendor").

System.out.println("jvm运营商:"+runtime.getVmVendor());//相当于System.getProperty("java.vm.version").

System.out.println("jvm实现版本:"+runtime.getVmVersion());

List args =runtime.getInputArguments();if(args != null && !args.isEmpty()){

System.out.println("vm参数:");for(String arg : args){

System.out.println(arg);

}

}

System.out.println("类路径:"+runtime.getClassPath());

System.out.println("引导类路径:"+runtime.getBootClassPath());

System.out.println("库路径:"+runtime.getLibraryPath());

}private static voidprintMemoryManagerInfo(){

List managers =ManagementFactory.getMemoryManagerMXBeans();if(managers != null && !managers.isEmpty()){for(MemoryManagerMXBean manager : managers){

System.out.println("vm内存管理器:名称="+manager.getName()+",管理的内存区="

+Arrays.deepToString(manager.getMemoryPoolNames())+",ObjectName="+manager.getObjectName());

}

}

}private static voidprintGarbageCollectorInfo(){

List garbages =ManagementFactory.getGarbageCollectorMXBeans();for(GarbageCollectorMXBean garbage : garbages){

System.out.println("垃圾收集器:名称="+garbage.getName()+",收集="+garbage.getCollectionCount()+",总花费时间="

+garbage.getCollectionTime()+",内存区名称="+Arrays.deepToString(garbage.getMemoryPoolNames()));

}

}private static voidprintMemoryInfo(){

MemoryMXBean memory=ManagementFactory.getMemoryMXBean();

MemoryUsage headMemory=memory.getHeapMemoryUsage();

System.out.println("head堆:");

System.out.println("\t初始(M):"+headMemory.getInit()/MB);

System.out.println("\t最大(上限)(M):"+headMemory.getMax()/MB);

System.out.println("\t当前(已使用)(M):"+headMemory.getUsed()/MB);

System.out.println("\t提交的内存(已申请)(M):"+headMemory.getCommitted()/MB);

System.out.println("\t使用率:"+headMemory.getUsed()*100/headMemory.getCommitted()+"%");

System.out.println("non-head非堆:");

MemoryUsage nonheadMemory=memory.getNonHeapMemoryUsage();

System.out.println("\t初始(M):"+nonheadMemory.getInit()/MB);

System.out.println("\t最大(上限)(M):"+nonheadMemory.getMax()/MB);

System.out.println("\t当前(已使用)(M):"+nonheadMemory.getUsed()/MB);

System.out.println("\t提交的内存(已申请)(M):"+nonheadMemory.getCommitted()/MB);

System.out.println("\t使用率:"+nonheadMemory.getUsed()*100/nonheadMemory.getCommitted()+"%");

}private static voidprintMemoryPoolInfo(){

List pools =ManagementFactory.getMemoryPoolMXBeans();if(pools != null && !pools.isEmpty()){for(MemoryPoolMXBean pool : pools){//只打印一些各个内存区都有的属性,一些区的特殊属性,可看文档或百度//最大值,初始值,如果没有定义的话,返回-1,所以真正使用时,要注意

System.out.println("vm内存区:\n\t名称="+pool.getName()+"\n\t所属内存管理者="+Arrays.deepToString(pool.getMemoryManagerNames())+"\n\t ObjectName="+pool.getObjectName()+"\n\t初始大小(M)="+pool.getUsage().getInit()/MB+"\n\t最大(上限)(M)="+pool.getUsage().getMax()/MB+"\n\t已用大小(M)="+pool.getUsage().getUsed()/MB+"\n\t已提交(已申请)(M)="+pool.getUsage().getCommitted()/MB+"\n\t使用率="+(pool.getUsage().getUsed()*100/pool.getUsage().getCommitted())+"%");

}

}

}private static voidprintThreadInfo(){

ThreadMXBean thread=ManagementFactory.getThreadMXBean();

System.out.println("ObjectName="+thread.getObjectName());

System.out.println("仍活动的线程总数="+thread.getThreadCount());

System.out.println("峰值="+thread.getPeakThreadCount());

System.out.println("线程总数(被创建并执行过的线程总数)="+thread.getTotalStartedThreadCount());

System.out.println("当初仍活动的守护线程(daemonThread)总数="+thread.getDaemonThreadCount());//检查是否有死锁的线程存在

long[] deadlockedIds =thread.findDeadlockedThreads();if(deadlockedIds != null && deadlockedIds.length > 0){

ThreadInfo[] deadlockInfos=thread.getThreadInfo(deadlockedIds);

System.out.println("死锁线程信息:");

System.out.println("\t\t线程名称\t\t状态\t\t");for(ThreadInfo deadlockInfo : deadlockInfos){

System.out.println("\t\t"+deadlockInfo.getThreadName()+"\t\t"+deadlockInfo.getThreadState()+"\t\t"+deadlockInfo.getBlockedTime()+"\t\t"+deadlockInfo.getWaitedTime()+"\t\t"+deadlockInfo.getStackTrace().toString());

}

}long[] threadIds =thread.getAllThreadIds();if(threadIds != null && threadIds.length > 0){

ThreadInfo[] threadInfos=thread.getThreadInfo(threadIds);

System.out.println("所有线程信息:");

System.out.println("\t\t线程名称\t\t\t\t\t状态\t\t\t\t\t线程id");for(ThreadInfo threadInfo : threadInfos){

System.out.println("\t\t"+threadInfo.getThreadName()+"\t\t\t\t\t"+threadInfo.getThreadState()+"\t\t\t\t\t"+threadInfo.getThreadId());

}

}

}private static booleanisSunOsMBean(OperatingSystemMXBean operatingSystem) {final String className =operatingSystem.getClass().getName();return "com.sun.management.OperatingSystem".equals(className)|| "com.sun.management.UnixOperatingSystem".equals(className);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值