1. 程式人生 > >在java程式碼中獲取JVM引數

在java程式碼中獲取JVM引數

近日關注效能調優,關注JMX,發現java.lang.management.*之強大。同時查閱了資料,整合一版關於JVM引數獲取的note,僅供參考:

Java程式碼  收藏程式碼
  1.     MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean();   
  2.     MemoryUsage usage = memorymbean.getHeapMemoryUsage();   
  3.     System.out.println("INIT HEAP: " + usage.getInit());   
  4.     System.out.println("MAX HEAP: "
     + usage.getMax());   
  5.     System.out.println("USE HEAP: " + usage.getUsed());   
  6.     System.out.println("\nFull Information:");   
  7.     System.out.println("Heap Memory Usage: "   
  8.     + memorymbean.getHeapMemoryUsage());   
  9.     System.out.println("Non-Heap Memory Usage: "   
  10.     + memorymbean.getNonHeapMemoryUsage());   
  11.     List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();   
  12.     System.out.println("===================java options=============== ");  
  13.     System.out.println(inputArguments);  
  14.     System.out.println("=======================通過java來獲取相關係統狀態============================ "
    );  
  15.     int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虛擬機器中的記憶體總量,以位元組為單位  
  16.     System.out.println("總的記憶體量 i is "+i);  
  17.     int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虛擬機器中的空閒記憶體量  
  18.     System.out.println("空閒記憶體量 j is "+j);  
  19.     System.out.println("最大記憶體量 is "+Runtime.getRuntime().maxMemory()/1024);  
  20.     System.out.println("=======================OperatingSystemMXBean============================ ");  
  21.     OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();  
  22. //    System.out.println(osm.getFreeSwapSpaceSize()/1024);  
  23. //    System.out.println(osm.getFreePhysicalMemorySize()/1024);  
  24. //    System.out.println(osm.getTotalPhysicalMemorySize()/1024);  
  25.     //獲取作業系統相關資訊  
  26.     System.out.println("osm.getArch() "+osm.getArch());  
  27.     System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors());  
  28.     //System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize());  
  29.     System.out.println("osm.getName() "+osm.getName());  
  30.     //System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime());  
  31.     System.out.println("osm.getVersion() "+osm.getVersion());  
  32.     //獲取整個虛擬機器記憶體使用情況  
  33.     System.out.println("=======================MemoryMXBean============================ ");  
  34.     MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean();  
  35.     System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage());  
  36.     System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage());  
  37.     //獲取各個執行緒的各種狀態,CPU 佔用情況,以及整個系統中的執行緒狀況  
  38.     System.out.println("=======================ThreadMXBean============================ ");  
  39.     ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean();  
  40.     System.out.println("getThreadCount "+tm.getThreadCount());  
  41.     System.out.println("getPeakThreadCount "+tm.getPeakThreadCount());  
  42.     System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime());  
  43.     System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount());  
  44.     System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime());  
  45.     //當前編譯器情況  
  46.     System.out.println("=======================CompilationMXBean============================ ");  
  47.     CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean();  
  48.     System.out.println("getName "+gm.getName());  
  49.     System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime());  
  50.     //獲取多個記憶體池的使用情況  
  51.     System.out.println("=======================MemoryPoolMXBean============================ ");  
  52.     List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans();  
  53.     for(MemoryPoolMXBean mpm:mpmList){  
  54.         System.out.println("getUsage "+mpm.getUsage());  
  55.         System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString());  
  56.     }  
  57.     //獲取GC的次數以及花費時間之類的資訊  
  58.     System.out.println("=======================MemoryPoolMXBean============================ ");  
  59.     List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans();  
  60.     for(GarbageCollectorMXBean gcm:gcmList){  
  61.         System.out.println("getName "+gcm.getName());  
  62.         System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames());  
  63.     }  
  64.     //獲取執行時資訊  
  65.     System.out.println("=======================RuntimeMXBean============================ ");  
  66.     RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();  
  67.     System.out.println("getClassPath "+rmb.getClassPath());  
  68.     System.out.println("getLibraryPath "+rmb.getLibraryPath());  
  69.     System.out.println("getVmVersion "+rmb.getVmVersion());  

執行結果如下:

Java程式碼  收藏程式碼
  1. INIT HEAP: 268435456  
  2. MAX HEAP: 1065484288  
  3. USE HEAP: 331632  
  4. Full Information:  
  5. Heap Memory Usage: init = 268435456(262144K) used = 331632(323K) committed = 266403840(260160K) max = 1065484288(1040512K)  
  6. Non-Heap Memory Usage: init = 134381568(131232K) used = 2607888(2546K) committed = 134709248(131552K) max = 570425344(557056K)  
  7. ==========java options=====   
  8. [-Xms256m, -Xmx1024m, -XX:PermSize=128M, -XX:MaxPermSize=512m, -Dfile.encoding=UTF-8]  
  9. =======================通過java來獲取相關係統狀態============================   
  10. 總的記憶體量 i is 260160  
  11. 空閒記憶體量 j is 259836  
  12. 最大記憶體量 is 1040512  
  13. =======================OperatingSystemMXBean============================   
  14. osm.getArch() x86  
  15. osm.getAvailableProcessors() 2  
  16. osm.getName() Windows 7  
  17. osm.getVersion() 6.1  
  18. =======================MemoryMXBean============================   
  19. getHeapMemoryUsage init = 268435456(262144K) used = 331632(323K) committed = 266403840(260160K) max = 1065484288(1040512K)  
  20. getNonHeapMemoryUsage init = 134381568(131232K) used = 2638064(2576K) committed = 134709248(131552K) max = 570425344(557056K)  
  21. =======================ThreadMXBean============================   
  22. getThreadCount 5  
  23. getPeakThreadCount 5  
  24. getCurrentThreadCpuTime 93600600  
  25. getDaemonThreadCount 4  
  26. getCurrentThreadUserTime 31200200  
  27. =======================CompilationMXBean============================   
  28. getName HotSpot Client Compiler  
  29. getTotalCompilationTime 1  
  30. =======================MemoryPoolMXBean============================   
  31. getUsage init = 163840(160K) used = 473920(462K) committed = 491520(480K) max = 33554432(32768K)  
  32. getMemoryManagerNames [Ljava.lang.String;@15b7986  
  33. getUsage init = 16580608(16192K) used = 331632(323K) committed = 16580608(16192K) max = 66060288(64512K)  
  34. getMemoryManagerNames [Ljava.lang.String;@1d9dc39  
  35. getUsage init = 2031616(1984K) used = 0(0K) committed = 2031616(1984K) max = 8257536(8064K)  
  36. getMemoryManagerNames [Ljava.lang.String;@93dcd  
  37. getUsage init = 247791616(241984K) used = 0(0K) committed = 247791616(241984K) max = 991166464(967936K)  
  38. getMemoryManagerNames [Ljava.lang.String;@b89838  
  39. getUsage init = 134217728(131072K) used = 2213312(2161K) committed = 134217728(131072K) max = 536870912(524288K)  
  40. getMemoryManagerNames [Ljava.lang.String;@111a3ac  
  41. =======================MemoryPoolMXBean============================   
  42. getName Copy  
  43. getMemoryPoolNames [Ljava.lang.String;@110b053  
  44. getName MarkSweepCompact  
  45. getMemoryPoolNames [Ljava.lang.String;@a83b8a  
  46. =======================RuntimeMXBean============================   
  47. getClassPath E:\workspaces\mss-workspace\Jmx\bin;E:\workspaces\mss-workspace\Jmx\lib\jmxtools.jar  
  48. getLibraryPath C:\Program Files (x86)\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre6/bin/client;C:/Program Files (x86)/Java/jre6/bin;d:\oracle\product\10.2.0\client_2\bin;d:\oracle\product\10.2.0\client_1;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\SWTOOLS\ReadyApps;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_14\bin;C:\Program Files (x86)\Java\jdk1.6.0_14\jre\bin;  
  49. getVmVersion 14.0-b16