实时取得虚拟机类信息、内存信息、MXBean的使用方法
- import java.lang.management.ClassLoadingMXBean;
- import java.lang.management.ManagementFactory;
- import java.lang.management.MemoryMXBean;
- import java.lang.management.MemoryUsage;
- import java.lang.management.RuntimeMXBean;
- /**
- * 本实验效果可以在java.lang.management中得到
- * @author fb
- *
- */
- public class Test extends Thread{
- RuntimeMXBean mxbean;
- private void setFactory(){
- mxbean = ManagementFactory.getRuntimeMXBean();
- //以下是取得虚拟机的属性
- System.out.println(mxbean.getVmVendor());
- System.out.println(mxbean.getVmName());
- System.out.println(mxbean.getClassPath());
- //类管理接口
- ClassLoadingMXBean aClassLoadingMXBean=ManagementFactory.getClassLoadingMXBean();
- System.out.println(aClassLoadingMXBean.getLoadedClassCount());
- //内存管理接口
- MemoryMXBean aMemoryMXBean=ManagementFactory.getMemoryMXBean();
- System.out.println(aMemoryMXBean.getObjectPendingFinalizationCount());//返回其终止被挂起的对象的近似数目
- //返回 Java 虚拟机使用的非堆内存的当前使用量
- MemoryUsage aMemoryUsage=aMemoryMXBean.getNonHeapMemoryUsage(); //虚拟机启动时从系统得到的内存(以字节为单位)
- System.out.println("虚拟机启动时从系统得到的内存:"+aMemoryUsage.getInit()); //表示当前已经使用的内存量(以字节为单位)
- System.out.println("当前已经使用的内存量:"+aMemoryUsage.getUsed()); //表示保证可以由 Java 虚拟机使用的内存量(以字节为单位)
- System.out.println("保证可以由 Java 虚拟机使用的内存量:"+aMemoryUsage.getCommitted()); //表示可以用于内存管理的最大内存量(以字节为单位)
- System.out.println("内存管理的最大内存量:"+aMemoryUsage.getMax());
- System.out.println("总体描述:"+aMemoryUsage.toString());
- }
- public void run(){
- try {
- while(true){
- setFactory();
- sleep(1000);
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- Test aTest=new Test();
- aTest.start();
- }
- }运行结果:
- C:/java>java Test
- Sun Microsystems Inc.
- Java HotSpot(TM) Client VM
- .;c:/jdk1.5/lib
- 306
- 0
- 虚拟机启动时从系统得到的内存:29556736
- 当前已经使用的内存量:12362144
- 保证可以由 Java 虚拟机使用的内存量:29851648
- 内存管理的最大内存量:121634816
- 总体描述:init = 29556736(28864K) used = 12362144(12072K) committed = 29851648(29152K) max = 121634816(118784K)
- 如果你想要给自己的软件提供这样的检测接口,那么只要做一个MBeanServer就可以了。这是一个相当不错的想法。