zoukankan      html  css  js  c++  java
  • JDK5.0 特性 监控与管理虚拟机

    来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291465.html

      1 import java.lang.management.ClassLoadingMXBean;
      2 
      3 import java.lang.management.CompilationMXBean;
      4 
      5 import java.lang.management.GarbageCollectorMXBean;
      6 
      7 import java.lang.management.ManagementFactory;
      8 
      9 import java.lang.management.MemoryMXBean;
     10 
     11 import java.lang.management.OperatingSystemMXBean;
     12 
     13 import java.lang.management.RuntimeMXBean;
     14 
     15 import java.lang.management.ThreadMXBean;
     16 
     17 import java.util.List;
     18 
     19  
     20 
     21 /**
     22 
     23         本例介绍如何监控和管理Java虚拟机,包括获取Java虚拟机的内存使用情况、线程数、运行时间等。
     24 
     25         在J2SE5.0中使用Bean监控和管理Java虚拟机,java.lang.management.ManagementFactory是管理Bean的工厂类,
     26 
     27 通过它的get系列方法能够获得不同的管理Bean的实例。
     28 
     29 1. java.lang.management.MemoryMXBean:                                该Bean用于管理Java虚拟机的内存系统。
     30 
     31                                                                                                                                一个Java虚拟机具有一个实例。
     32 
     33 2.java.lang.management.ClassLoadingMXBean:                     该Bean用于管理Java虚拟机的类加载系统。
     34 
     35                                                                                                                                一个Java虚拟机具有一个实例。
     36 
     37 3.java.lang.management.TreadMXBean:                                       该Bean用于管理Java虚拟机的线程系统。
     38 
     39                                                                                                                                 一个Java虚拟机具有一个实例。
     40 
     41 4.java.lang.management.RuntimeMXBean:                                 该Bean用于管理Java虚拟机的线程系统。
     42 
     43                                                                                                                                 一个Java虚拟机具有一个实例。
     44 
     45 5.java.lang.management.OperatingSystemMXBean:            该Bean用于管理操作系统。
     46 
     47                                                                                                                                 一个Java虚拟机具有一个实例。
     48 
     49 6.java.lang.management.CompilationMXBean:                        该Bean用于管理Java虚拟机的编译系统。
     50 
     51                                                                                                                                  一个Java虚拟机具有一个实例。
     52 
     53 7.java.lang.management.GarbageCollectorMXBean:             该Bean用于管理Java虚拟机的垃圾回收系统。
     54 
     55                                                                                                                                  一个Java虚拟机具有一个或者多个实例。
     56 
     57  */
     58 
     59 public class JDKMBean {
     60 
     61                    public static void printMemoryMXBean(){
     62 
     63                                       //获得单一实例
     64 
     65                                       MemoryMXBean instance = ManagementFactory.getMemoryMXBean();
     66 
     67                                       System.out.printf("%n---%s---%n",instance.getClass().getName());
     68 
     69                                       //返回用于对象分配的堆的当前内存使用量
     70 
     71                                       System.out.printf("%s: %s%n","HeapMemoryUsage",instance.getHeapMemoryUsage());
     72 
     73                                       //返回Java虚拟机使用的非堆内存的当前使用量
     74 
     75                                       System.out.printf("%s: %s%n","getNonHeapMemoryUsage",instance.getNonHeapMemoryUsage());
     76 
     77                                       instance.gc();
     78 
     79                    }
     80 
     81                   
     82 
     83                    public static void printClassLoadingMXBean(){
     84 
     85                                       //获得单一实例
     86 
     87                                       ClassLoadingMXBean instance = ManagementFactory.getClassLoadingMXBean();
     88 
     89                                       System.out.printf("%n---%s---%n",instance.getClass().getName());
     90 
     91                                       //返回当前加载到Java虚拟机中的类的数量
     92 
     93                                       System.out.printf("%s: %s%n","LoadedClassCount",instance.getLoadedClassCount());
     94 
     95                                       //返回自Java虚拟机开始执行到目前已经加载的类的总数
     96 
     97                                       System.out.printf("%s: %s%n","TotalLoadedClassCount",instance.getTotalLoadedClassCount());
     98 
     99                                       //返回自Java虚拟机开始执行到目前已经卸载的类的总数
    100 
    101                                       System.out.printf("%s: %s%n","UnloadedLoadedClassCount",instance.getUnloadedClassCount());
    102 
    103                    }
    104 
    105                   
    106 
    107                    public static void printThreadMXBean(){
    108 
    109                                       //获得单一实例
    110 
    111                                       ThreadMXBean instance = ManagementFactory.getThreadMXBean();
    112 
    113                                       System.out.printf("%n---%s---%n",instance.getClass().getName());
    114 
    115                                       //返回活动线程的当前数目,包括守护线程和非守护线程
    116 
    117                                       System.out.printf("%s: %s%n","ThreadCount",instance.getThreadCount());
    118 
    119                                       //返回活动线程ID
    120 
    121                                       System.out.printf("%s: %n","Thread IDs");
    122 
    123                                       long[] ids = instance.getAllThreadIds();
    124 
    125                                       for(long id : ids){
    126 
    127                                                          System.out.printf("%s;    ", id);
    128 
    129                                       }
    130 
    131                                       System.out.println();
    132 
    133                                       //返回活动守护线程的当前数目
    134 
    135                                       System.out.printf("%s: %s%n","DaemonThreadCount",instance.getDaemonThreadCount());
    136 
    137                                       //返回自从java虚拟机启动或峰值重置以来峰值活动线程计数
    138 
    139                                       System.out.printf("%s: %s%n","PeakThreadCount",instance.getPeakThreadCount());
    140 
    141                                       //返回当前线程的总CPU时间
    142 
    143                                       System.out.printf("%s: %s%n","CurrentCpuTime",instance.getCurrentThreadCpuTime());
    144 
    145                                       //返回当前线程在用户模式中执行的CPU时间
    146 
    147                                       System.out.printf("%s: %s%n","CurrentThreadCpuTime",instance.getCurrentThreadUserTime());
    148 
    149                    }
    150 
    151                   
    152 
    153                    public static void printRuntimeMXBean(){
    154 
    155                                       //获得单一实例
    156 
    157                                       RuntimeMXBean instance = ManagementFactory.getRuntimeMXBean();
    158 
    159                                       System.out.printf("%n---%s---%n",instance.getClass().getName());
    160 
    161                                       //返回由引导类加载器用于搜索类文件的引导类路径
    162 
    163                                       System.out.printf("%s: %s%n","BootClassPath",instance.getBootClassPath());
    164 
    165                                       //返回系统类加载器用于搜索类文件的Java类路径
    166 
    167                                       System.out.printf("%s: %s%n","ClassPath",instance.getClassPath());
    168 
    169                                       //引用传递给Java虚拟机的输入变量,其中不包括传递给main方法的变量
    170 
    171                                       System.out.printf("%s: %n","InputArguments");
    172 
    173                                       List<String> args = instance.getInputArguments();
    174 
    175                                       for(String arg : args){
    176 
    177                                                          System.out.printf("%s;  ",arg);
    178 
    179                                       }
    180 
    181                                       //返回Java库路径
    182 
    183                                       System.out.printf("%s: %s%n","LibraryPath",instance.getLibraryPath());
    184 
    185                                       //返回正在运行的Java虚拟机实现的管理接口的规范版本
    186 
    187                                       System.out.printf("%s: %s%n","ManagementSpecVersion",instance.getManagementSpecVersion());
    188 
    189                                       //返回正在运行的Java虚拟机的名称
    190 
    191                                       System.out.printf("%s: %s%n","Name",instance.getName());
    192 
    193                                      
    194 
    195                                       //返回Java虚拟机规范名称
    196 
    197                                       System.out.printf("%s: %s%n","SpecName",instance.getSpecName());
    198 
    199                                       //返回Java虚拟机规范提供商
    200 
    201                                       System.out.printf("%s: %s%n","SpecVendor",instance.getSpecVendor());
    202 
    203                                       //返回Java虚拟机规范版本
    204 
    205                                       System.out.printf("%s: %s%n","SpecVersion",instance.getSpecVersion());
    206 
    207                                      
    208 
    209                                       //返回Java虚拟机实现名称
    210 
    211                                       System.out.printf("%s: %s%n","VmName",instance.getVmName());
    212 
    213                                       //返回Java虚拟机实现提供商
    214 
    215                                       System.out.printf("%s: %s%n","VmVendor",instance.getVmVendor());
    216 
    217                                       //返回Java虚拟机实现版本
    218 
    219                                       System.out.printf("%s: %s%n","VmVersion",instance.getVmVersion());
    220 
    221                                      
    222 
    223                                       //返回Java虚拟机的启动时间
    224 
    225                                       System.out.printf("%s: %s%n","startTime",instance.getStartTime());
    226 
    227                                       //返回Java虚拟机的正常运行时间
    228 
    229                                       System.out.printf("%s: %s%n","Uptime",instance.getUptime());
    230 
    231                    }
    232 
    233                   
    234 
    235                    public static void printOperatingSystemMXBean(){
    236 
    237                                       //获得单一实例
    238 
    239                                       OperatingSystemMXBean instance = ManagementFactory.getOperatingSystemMXBean();
    240 
    241                                       System.out.printf("%n---%s---%n",instance.getClass().getName());
    242 
    243                                       //返回操作系统的架构
    244 
    245                                       System.out.printf("%s: %s%n","Arch",instance.getArch());
    246 
    247                                       //返回Java虚拟机可以使用的处理器数目
    248 
    249                                       System.out.printf("%s: %s%n","AvailableProcessors",instance.getAvailableProcessors());
    250 
    251                                       //返回操作系统名称
    252 
    253                                       System.out.printf("%s: %s%n","Name",instance.getName());
    254 
    255                                       //返回操作系统版本
    256 
    257                                       System.out.printf("%s: %s%n","Version",instance.getVersion());
    258 
    259                    }
    260 
    261                   
    262 
    263                    public static void printCompilationMXBean(){
    264 
    265                                       //获得单一实例
    266 
    267                                       CompilationMXBean instance = ManagementFactory.getCompilationMXBean();
    268 
    269                                       System.out.printf("%n---%s---%n",instance.getClass().getName());
    270 
    271                                       //返回即时(JIT)编译器的名称
    272 
    273                                       System.out.printf("%s: %s%n","JIT",instance.getName());
    274 
    275                                       //返回在编译上花费的累积耗费时间的近似值
    276 
    277                                       System.out.printf("%s: %s%n","TotalCompilationTime",instance.getTotalCompilationTime());
    278 
    279                    }
    280 
    281                   
    282 
    283                    public static void printGargageCollectorMXBean(){
    284 
    285                                       //获得单一实例
    286 
    287                                       List<GarbageCollectorMXBean> instances = ManagementFactory.getGarbageCollectorMXBeans();
    288 
    289                                       System.out.printf("%n---%s---%n",GarbageCollectorMXBean.class.getName());
    290 
    291                                       //遍历每个实例
    292 
    293                                       for(GarbageCollectorMXBean instance : instances){
    294 
    295                                                          //返回垃圾收集器的名字
    296 
    297                                                          System.out.printf("***%s: %s***%n","Name",instance.getName());
    298 
    299                                                          //返回已发生的回收的总次数
    300 
    301                                                          System.out.printf("%s: %s%n","CollectionCount",instance.getCollectionCount());
    302 
    303                                                          //返回近似的累积回收时间
    304 
    305                                                          System.out.printf("%s: %s%n","CollectionTime",instance.getCollectionTime());
    306 
    307                                       }
    308 
    309                    }
    310 
    311                   
    312 
    313                    public static void main(String[] args){
    314 
    315                                       JDKMBean.printMemoryMXBean();
    316 
    317                                       JDKMBean.printClassLoadingMXBean();
    318 
    319                                       JDKMBean.printThreadMXBean();
    320 
    321                                       JDKMBean.printRuntimeMXBean();
    322 
    323                                       JDKMBean.printOperatingSystemMXBean();
    324 
    325                                       JDKMBean.printCompilationMXBean();
    326 
    327                                       JDKMBean.printGargageCollectorMXBean();
    328 
    329                    }
    330 
    331 }
  • 相关阅读:
    2019-2020-1 20175320 《信息安全系统设计基础》第五周学习总结
    2019-2020-1 20175320 《信息安全系统设计基础》第四周学习总结
    2019-2020-1 20175320 《信息安全系统设计基础》第三周学习总结
    2018-2019-2 20175320实验五《网络编程与安全》实验报告
    20175320个人项目-趣味自然数
    MySort
    2018-2019-2 20175320实验四《Android程序设计》实验报告
    20175320 2018-2019-2 《Java程序设计》第11周学习总结
    20175320 2018-2019-2 《Java程序设计》第10周学习总结
    2018-2019-2 20175320实验三《敏捷开发与XP实践》实验报告
  • 原文地址:https://www.cnblogs.com/sunxucool/p/3842418.html
Copyright © 2011-2022 走看看