監視java虛擬機各種狀態

 

  1. /** 
  2.  * 用戶可以通過MXBean可以管理和監視虛擬機。 
  3.  */ 
  4. public class JDKMBean { 
  5.   
  6.     /** 
  7.      * MemoryMXBean是Java 虛擬機的內存系統的管理接口 Java 虛擬機具有此接口的實現類的單一實例 
  8.      */ 
  9.     public static void printMemoryMXBean() { 
  10.         // 獲得單一實例 
  11.         MemoryMXBean instance = ManagementFactory.getMemoryMXBean(); 
  12.         System.out.printf("%n---%s---%n", instance.getClass().getName()); 
  13.         // 返回用於對象分配的堆的當前內存使用量 
  14.         System.out.printf("%s: %s%n""HeapMemoryUsage"
  15.                 instance.getHeapMemoryUsage()); 
  16.         // 返回 Java 虛擬機使用的非堆內存的當前使用量 
  17.         System.out.printf("%s: %s%n""getNonHeapMemoryUsage"
  18.                 instance.getNonHeapMemoryUsage()); 
  19.         // 運行垃圾回收器 
  20.         instance.gc(); 
  21.     } 
  22.   
  23.     /** 
  24.      * ClassLoadingMXBean是Java 虛擬機的類加載系統的管理接口 Java 虛擬機具有此接口的實現類的單個實例 
  25.      */ 
  26.     public static void printClassLoadingMXBean() { 
  27.         // 獲得單一實例 
  28.         ClassLoadingMXBean instance = ManagementFactory.getClassLoadingMXBean(); 
  29.         System.out.printf("%n---%s---%n", instance.getClass().getName()); 
  30.         // 返回當前加載到 Java 虛擬機中的類的數量 
  31.         System.out.printf("%s: %s%n""LoadedClassCount"
  32.                 instance.getLoadedClassCount()); 
  33.         // 返回自 Java 虛擬機開始執行到目前已經加載的類的總數 
  34.         System.out.printf("%s: %s%n""TotalLoadedClassCount"
  35.                 instance.getTotalLoadedClassCount()); 
  36.         // 返回自 Java 虛擬機開始執行到目前已經卸載的類的總數 
  37.         System.out.printf("%s: %s%n""UnloadedClassCount"
  38.                 instance.getUnloadedClassCount()); 
  39.     } 
  40.   
  41.     /** 
  42.      * ThreadMXBean是Java 虛擬機線程系統的管理接口 Java 虛擬機具有此接口的實現類的單個實例 
  43.      */ 
  44.     public static void printThreadMXBean() { 
  45.         // 獲得單一實例 
  46.         ThreadMXBean instance = ManagementFactory.getThreadMXBean(); 
  47.         System.out.printf("%n---%s---%n", instance.getClass().getName()); 
  48.         // 返回活動線程的當前數目,包括守護線程和非守護線程。 
  49.         System.out.printf("%s: %s%n""ThreadCount", instance.getThreadCount()); 
  50.         // 返回活動線程 ID 
  51.         System.out.printf("%s: %n""Thread IDs"); 
  52.         long[] ids = instance.getAllThreadIds(); 
  53.         for (long id : ids) { 
  54.             System.out.printf("%s;  ", id); 
  55.         } 
  56.         System.out.printf("%n"); 
  57.         // 返回活動守護線程的當前數目 
  58.         System.out.printf("%s: %s%n""DaemonThreadCount"
  59.                 instance.getDaemonThreadCount()); 
  60.         // 返回自從 Java 虛擬機啓動或峯值重置以來峯值活動線程計數 
  61.         System.out.printf("%s: %s%n""PeakThreadCount"
  62.                 instance.getPeakThreadCount()); 
  63.         // 返回當前線程的總 CPU 時間 
  64.         System.out.printf("%s: %s%n""CurrentThreadCpuTime"
  65.                 instance.getCurrentThreadCpuTime()); 
  66.         // 返回當前線程在用戶模式中執行的 CPU 時間 
  67.         System.out.printf("%s: %s%n""CurrentThreadUserTime"
  68.                 instance.getCurrentThreadUserTime()); 
  69.     } 
  70.   
  71.     /** 
  72.      * RuntimeMXBean是Java 虛擬機的運行時系統的管理接口 Java 虛擬機具有此接口的實現類的單個實例 
  73.      */ 
  74.     public static void printRuntimeMXBean() { 
  75.         // 獲得單一實例 
  76.         RuntimeMXBean instance = ManagementFactory.getRuntimeMXBean(); 
  77.         System.out.printf("%n---%s---%n", instance.getClass().getName()); 
  78.         // 返回由引導類加載器用於搜索類文件的引導類路徑 
  79.         System.out.printf("%s: %s%n""BootClassPath"
  80.                 instance.getBootClassPath()); 
  81.         // 返回系統類加載器用於搜索類文件的 Java 類路徑 
  82.         System.out.printf("%s: %s%n""ClassPath", instance.getClassPath()); 
  83.         // 返回傳遞給 Java 虛擬機的輸入變量,其中不包括傳遞給 main 方法的變量 
  84.         System.out.printf("%s%n""InputArguments"); 
  85.         List<String> args = instance.getInputArguments(); 
  86.         for (String arg : args) { 
  87.             System.out.printf("%s;  ", arg); 
  88.         } 
  89.         // 返回 Java 庫路徑 
  90.         System.out.printf("%s: %s%n""LibraryPath", instance.getLibraryPath()); 
  91.         // 返回正在運行的 Java 虛擬機實現的管理接口的規範版本 
  92.         System.out.printf("%s: %s%n""ManagementSpecVersion"
  93.                 instance.getManagementSpecVersion()); 
  94.         // 返回表示正在運行的 Java 虛擬機的名稱 
  95.         System.out.printf("%s: %s%n""Name", instance.getName()); 
  96.   
  97.         // 返回 Java 虛擬機規範名稱 
  98.         System.out.printf("%s: %s%n""SpecName", instance.getSpecName()); 
  99.         // 返回 Java 虛擬機規範供應商 
  100.         System.out.printf("%s: %s%n""SpecVendor", instance.getSpecVendor()); 
  101.         // 返回 Java 虛擬機規範版本 
  102.         System.out.printf("%s: %s%n""SpecVersion", instance.getSpecVersion()); 
  103.   
  104.         // 返回 Java 虛擬機實現名稱 
  105.         System.out.printf("%s: %s%n""VmName", instance.getVmName()); 
  106.         // 返回 Java 虛擬機實現供應商 
  107.         System.out.printf("%s: %s%n""VmVendor", instance.getVmVendor()); 
  108.         // 返回 Java 虛擬機實現版本 
  109.         System.out.printf("%s: %s%n""VmVersion", instance.getVmVersion()); 
  110.   
  111.         // 返回 Java 虛擬機的啓動時間 
  112.         System.out.printf("%s: %s%n""StartTime", instance.getStartTime()); 
  113.         // 返回 Java 虛擬機的正常運行時間 
  114.         System.out.printf("%s: %s%n""Uptime", instance.getUptime()); 
  115.     } 
  116.   
  117.     /** 
  118.      * OperatingSystemMXBean是操作系統的管理接口 Java 虛擬機具有此接口的實現類的單個實例 
  119.      */ 
  120.     public static void printOperatingSystemMXBean() { 
  121.         // 獲得單一實例 
  122.         OperatingSystemMXBean instance = ManagementFactory 
  123.                 .getOperatingSystemMXBean(); 
  124.         System.out.printf("%n---%s---%n", instance.getClass().getName()); 
  125.         // 返回操作系統的架構 
  126.         System.out.printf("%s: %s%n""Arch", instance.getArch()); 
  127.         // 返回 Java 虛擬機可以使用的處理器數目 
  128.         System.out.printf("%s: %s%n""AvailableProcessors"
  129.                 instance.getAvailableProcessors()); 
  130.         // 返回操作系統名稱 
  131.         System.out.printf("%s: %s%n""Name", instance.getName()); 
  132.         // 返回操作系統版本 
  133.         System.out.printf("%s: %s%n""Version", instance.getVersion()); 
  134.     } 
  135.   
  136.     /** 
  137.      * CompilationMXBean是Java 虛擬機的編譯系統的管理接口 Java 虛擬機具有此接口的實現類的單個實例 
  138.      */ 
  139.     public static void printCompilationMXBean() { 
  140.         // 獲得單一實例 
  141.         CompilationMXBean instance = ManagementFactory.getCompilationMXBean(); 
  142.         System.out.printf("%n---%s---%n", instance.getClass().getName()); 
  143.         // 返回即時 (JIT) 編譯器的名稱 
  144.         System.out.printf("%s: %s%n""Name", instance.getName()); 
  145.         // 返回在編譯上花費的累積耗費時間的近似值 
  146.         System.out.printf("%s: %s%n""TotalCompilationTime"
  147.                 instance.getTotalCompilationTime()); 
  148.     } 
  149.   
  150.     /** 
  151.      * GarbageCollectorMXBean是Java 虛擬機的垃圾回收的管理接口 Java 虛擬機可能具有此接口的實現類的一個或多個實例 
  152.      */ 
  153.     public static void printGarbageCollectorMXBean() { 
  154.         // 獲得所有實例 
  155.         List<GarbageCollectorMXBean> instances = ManagementFactory 
  156.                 .getGarbageCollectorMXBeans(); 
  157.         System.out.printf("%n---%s---%n"
  158.                 GarbageCollectorMXBean.class.getName()); 
  159.         // 遍歷每個實例 
  160.         for (GarbageCollectorMXBean instance : instances) { 
  161.             // 返回垃圾收集器的名字 
  162.             System.out.printf("***%s: %s***%n""Name", instance.getName()); 
  163.             // 返回已發生的回收的總次數 
  164.             System.out.printf("%s: %s%n""CollectionCount"
  165.                     instance.getCollectionCount()); 
  166.             // 返回近似的累積回收時間 
  167.             System.out.printf("%s: %s%n""CollectionTime"
  168.                     instance.getCollectionTime()); 
  169.         } 
  170.     } 

轉自雲代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章