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 }

 

posted @ 2014-07-14 11:51  悟寰轩-叶秋  阅读(289)  评论(0编辑  收藏  举报