java.lang.management包中的那些内存管理接口(类),如MemoryPoolMXBean,MemoryMXBean到底能提供什么样的功能?
看了API不是很明白。
迫切希望高手能结合一些case给讲讲,就内存方面的就行!
3q

解决方案 »

  1.   

    个人理解:提供给外部应用查看jvm的运行状况的吧例如:jconsole 等工具 查看 jvm运行状况,象内存,线程,
      

  2.   

    这样啊,那岂不是和Runtime获取内存使用情况的效果差不多?
      

  3.   

    呵呵,希望这个对你有帮助
    http://improving.javaeye.com/blog/436317
      

  4.   

    import java.lang.management.ClassLoadingMXBean;
    import java.lang.management.CompilationMXBean;
    import java.lang.management.ManagementFactory;
    import java.lang.management.MemoryMXBean;
    import java.lang.management.ThreadMXBean;
    import java.lang.management.RuntimeMXBean;
    import java.lang.management.OperatingSystemMXBean;
    import java.lang.management.MemoryPoolMXBean;
    import java.util.List;public class JVM {
        
        public static void main(String[] args) {
            //Java 虚拟机线程系统的管理接口 ThreadMXBean
            ThreadMXBean th=(ThreadMXBean)ManagementFactory.getThreadMXBean() ;
            System.out.println("活动线程的当前数目"+th.getThreadCount());
            System.out.println("返回活动守护线程的当前数目"+th.getDaemonThreadCount());
            System.out.println("Java 虚拟机启动或峰值重置以来峰值活动线程计数"+th.getPeakThreadCount());
            System.out.println("返回当前线程的总 CPU 时间"+th.getCurrentThreadUserTime());
            System.out.println("当前线程在用户模式中执行的 CPU 时间"+th.getCurrentThreadUserTime());
            
            //Java 虚拟机的运行时系统的管理接口。 RuntimeMXBean
            RuntimeMXBean run=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();
            System.out.println("正在运行的 Java 虚拟机的名称"+run.getName());
            System.out.println("Java 虚拟机规范名称"+run.getSpecName());
            System.out.println("返回 Java 库路径"+run.getLibraryPath());
            System.out.println("系统类加载器用于搜索类文件的 Java 类路径"+run.getClassPath());
            
            //用于操作系统的管理接口,Java 虚拟机在此操作系统上运行 OperatingSystemMXBean
            OperatingSystemMXBean op=(OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
            System.out.println("返回操作系统的架构"+op.getArch());
            System.out.println("返回操作系统名称"+op.getName());
            System.out.println("返回操作系统的版本"+op.getVersion());
            System.out.println("Java 虚拟机可以使用的处理器数目"+op.getAvailableProcessors());
        
            //内存池的管理接口。内存池表示由 Java 虚拟机管理的内存资源,
            //由一个或多个内存管理器对内存池进行管理 MemoryPoolMXBean
             List<MemoryPoolMXBean> list=ManagementFactory.getMemoryPoolMXBeans();
             for(MemoryPoolMXBean mem:list){
              System.out.println("Java 虚拟机启动以来或自峰值重置以来此内存池的峰值内存使用量"+mem.getPeakUsage());
              System.out.println("返回此内存池的类型"+mem.getType());
              System.out.println("内存使用量超过其阈值的次数"+ mem.getUsage());
             }
             //Java 虚拟机内存系统的管理接口。 MemoryMXBean
             MemoryMXBean mem=(MemoryMXBean)ManagementFactory.getMemoryMXBean();
             System.out.println(" 返回用于对象分配的堆的当前内存使用量"+mem.getHeapMemoryUsage());
             System.out.println("Java 虚拟机使用的非堆内存的当前内存使用量"+mem.getNonHeapMemoryUsage());
             // Java 虚拟机的编译系统的管理接口 CompilationMXBean
             CompilationMXBean com=(CompilationMXBean)ManagementFactory.getCompilationMXBean();
             System.out.println("即时 (JIT) 编译器的名称"+com.getName());
             System.out.println("在编译上花费的累积耗费时间的近似值(毫秒)"+com.getTotalCompilationTime());
             
             //Java 虚拟机的类加载系统的管理接口 ClassLoadingMXBean
             ClassLoadingMXBean cl=(ClassLoadingMXBean)ManagementFactory.getClassLoadingMXBean();
             System.out.println("当前加载到 Java 虚拟机中的类的数量"+cl.getLoadedClassCount());
             System.out.println("Java 虚拟机开始执行到目前已经加载的类的总数"+cl.getTotalLoadedClassCount());
             System.out.println("Java 虚拟机开始执行到目前已经卸载的类的总数"+cl.getUnloadedClassCount());
              }
    }
      

  5.   


    very good,你是我的偶像。
      

  6.   

    支持6楼,不知道用这个可不可以自己写一个JConsole