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 }