原文地址:http://blog.csdn.net/dream_broken/article/details/49759043

想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如jdk的bin下就提供了很多工具。

比如,本地运行一个程序,让它死循环

  1. while(true){
  2. try {
  3. Thread.sleep(10*1000);
  4. } catch (Exception e) {
  5. }
  6. }

然后,点击启动jconsole.exe

可以发现,jconsole.exe可以连接本地,也可以连接远程,我们选择本地的中的刚刚上面执行的那个类

我们发现,居然可以监控到这么多信息,那如果我们自己写代码,能否获取到这些信息呢,点击MBean。

java.lang下,看名称就知道是什么了,再点击某一个,会看到一些类信息,也就是说,我们是有可能自己写代码也能获取到jvm信息的。

下面就记录下例子代码。

  1. package com.fei;
  2. import java.lang.management.ClassLoadingMXBean;
  3. import java.lang.management.CompilationMXBean;
  4. import java.lang.management.GarbageCollectorMXBean;
  5. import java.lang.management.ManagementFactory;
  6. import java.lang.management.MemoryMXBean;
  7. import java.lang.management.MemoryManagerMXBean;
  8. import java.lang.management.MemoryPoolMXBean;
  9. import java.lang.management.MemoryUsage;
  10. import java.lang.management.OperatingSystemMXBean;
  11. import java.lang.management.RuntimeMXBean;
  12. import java.lang.management.ThreadInfo;
  13. import java.lang.management.ThreadMXBean;
  14. import java.lang.reflect.InvocationTargetException;
  15. import java.lang.reflect.Method;
  16. import java.util.Arrays;
  17. import java.util.List;
  18. public class JvmInfo {
  19. static final long MB = 1024 * 1024;
  20. public static void main(String[] args) {
  21. //打印系统信息
  22. System.out.println("===========打印系统信息==========");
  23. printOperatingSystemInfo();
  24. //打印编译信息
  25. System.out.println("===========打印编译信息==========");
  26. printCompilationInfo();
  27. //打印类加载信息
  28. System.out.println("===========打印类加载信息==========");
  29. printClassLoadingInfo();
  30. //打印运行时信息
  31. System.out.println("===========打印运行时信息==========");
  32. printRuntimeInfo();
  33. //打印内存管理器信息
  34. System.out.println("===========打印内存管理器信息==========");
  35. printMemoryManagerInfo();
  36. //打印垃圾回收信息
  37. System.out.println("===========打印垃圾回收信息==========");
  38. printGarbageCollectorInfo();
  39. //打印vm内存
  40. System.out.println("===========打印vm内存信息==========");
  41. printMemoryInfo();
  42. //打印vm各内存区信息
  43. System.out.println("===========打印vm各内存区信息==========");
  44. printMemoryPoolInfo();
  45. //打印线程信息
  46. System.out.println("===========打印线程==========");
  47. printThreadInfo();
  48. }
  49. private static void printOperatingSystemInfo(){
  50. OperatingSystemMXBean system = ManagementFactory.getOperatingSystemMXBean();
  51. //相当于System.getProperty("os.name").
  52. System.out.println("系统名称:"+system.getName());
  53. //相当于System.getProperty("os.version").
  54. System.out.println("系统版本:"+system.getVersion());
  55. //相当于System.getProperty("os.arch").
  56. System.out.println("操作系统的架构:"+system.getArch());
  57. //相当于 Runtime.availableProcessors()
  58. System.out.println("可用的内核数:"+system.getAvailableProcessors());
  59. if(isSunOsMBean(system)){
  60. long totalPhysicalMemory = getLongFromOperatingSystem(system,"getTotalPhysicalMemorySize");
  61. long freePhysicalMemory = getLongFromOperatingSystem(system, "getFreePhysicalMemorySize");
  62. long usedPhysicalMemorySize =totalPhysicalMemory - freePhysicalMemory;
  63. System.out.println("总物理内存(M):"+totalPhysicalMemory/MB);
  64. System.out.println("已用物理内存(M):"+usedPhysicalMemorySize/MB);
  65. System.out.println("剩余物理内存(M):"+freePhysicalMemory/MB);
  66. long  totalSwapSpaceSize = getLongFromOperatingSystem(system, "getTotalSwapSpaceSize");
  67. long freeSwapSpaceSize = getLongFromOperatingSystem(system, "getFreeSwapSpaceSize");
  68. long usedSwapSpaceSize = totalSwapSpaceSize - freeSwapSpaceSize;
  69. System.out.println("总交换空间(M):"+totalSwapSpaceSize/MB);
  70. System.out.println("已用交换空间(M):"+usedSwapSpaceSize/MB);
  71. System.out.println("剩余交换空间(M):"+freeSwapSpaceSize/MB);
  72. }
  73. }
  74. private static long getLongFromOperatingSystem(OperatingSystemMXBean operatingSystem, String methodName) {
  75. try {
  76. final Method method = operatingSystem.getClass().getMethod(methodName,
  77. (Class<?>[]) null);
  78. method.setAccessible(true);
  79. return (Long) method.invoke(operatingSystem, (Object[]) null);
  80. } catch (final InvocationTargetException e) {
  81. if (e.getCause() instanceof Error) {
  82. throw (Error) e.getCause();
  83. } else if (e.getCause() instanceof RuntimeException) {
  84. throw (RuntimeException) e.getCause();
  85. }
  86. throw new IllegalStateException(e.getCause());
  87. } catch (final NoSuchMethodException e) {
  88. throw new IllegalArgumentException(e);
  89. } catch (final IllegalAccessException e) {
  90. throw new IllegalStateException(e);
  91. }
  92. }
  93. private static void printCompilationInfo(){
  94. CompilationMXBean compilation = ManagementFactory.getCompilationMXBean();
  95. System.out.println("JIT编译器名称:"+compilation.getName());
  96. //判断jvm是否支持编译时间的监控
  97. if(compilation.isCompilationTimeMonitoringSupported()){
  98. System.out.println("总编译时间:"+compilation.getTotalCompilationTime()+"秒");
  99. }
  100. }
  101. private static void printClassLoadingInfo(){
  102. ClassLoadingMXBean classLoad= ManagementFactory.getClassLoadingMXBean();
  103. System.out.println("已加载类总数:"+classLoad.getTotalLoadedClassCount());
  104. System.out.println("已加载当前类:"+classLoad.getLoadedClassCount());
  105. System.out.println("已卸载类总数:"+classLoad.getUnloadedClassCount());
  106. }
  107. private static void printRuntimeInfo(){
  108. RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
  109. System.out.println("进程PID="+runtime.getName().split("@")[0]);
  110. System.out.println("jvm规范名称:"+runtime.getSpecName());
  111. System.out.println("jvm规范运营商:"+runtime.getSpecVendor());
  112. System.out.println("jvm规范版本:"+runtime.getSpecVersion());
  113. //返回虚拟机在毫秒内的开始时间。该方法返回了虚拟机启动时的近似时间
  114. System.out.println("jvm启动时间(毫秒):"+runtime.getStartTime());
  115. //相当于System.getProperties
  116. System.out.println("获取System.properties:"+runtime.getSystemProperties());
  117. System.out.println("jvm正常运行时间(毫秒):"+runtime.getUptime());
  118. //相当于System.getProperty("java.vm.name").
  119. System.out.println("jvm名称:"+runtime.getVmName());
  120. //相当于System.getProperty("java.vm.vendor").
  121. System.out.println("jvm运营商:"+runtime.getVmVendor());
  122. //相当于System.getProperty("java.vm.version").
  123. System.out.println("jvm实现版本:"+runtime.getVmVersion());
  124. List<String> args = runtime.getInputArguments();
  125. if(args != null && !args.isEmpty()){
  126. System.out.println("vm参数:");
  127. for(String arg : args){
  128. System.out.println(arg);
  129. }
  130. }
  131. System.out.println("类路径:"+runtime.getClassPath());
  132. System.out.println("引导类路径:"+runtime.getBootClassPath());
  133. System.out.println("库路径:"+runtime.getLibraryPath());
  134. }
  135. private static void printMemoryManagerInfo(){
  136. List<MemoryManagerMXBean> managers = ManagementFactory.getMemoryManagerMXBeans();
  137. if(managers != null && !managers.isEmpty()){
  138. for(MemoryManagerMXBean manager : managers){
  139. System.out.println("vm内存管理器:名称="+manager.getName()+",管理的内存区="
  140. +Arrays.deepToString(manager.getMemoryPoolNames())+",ObjectName="+manager.getObjectName());
  141. }
  142. }
  143. }
  144. private static void printGarbageCollectorInfo(){
  145. List<GarbageCollectorMXBean> garbages = ManagementFactory.getGarbageCollectorMXBeans();
  146. for(GarbageCollectorMXBean garbage : garbages){
  147. System.out.println("垃圾收集器:名称="+garbage.getName()+",收集="+garbage.getCollectionCount()+",总花费时间="
  148. +garbage.getCollectionTime()+",内存区名称="+Arrays.deepToString(garbage.getMemoryPoolNames()));
  149. }
  150. }
  151. private static void printMemoryInfo(){
  152. MemoryMXBean memory = ManagementFactory.getMemoryMXBean();
  153. MemoryUsage headMemory = memory.getHeapMemoryUsage();
  154. System.out.println("head堆:");
  155. System.out.println("\t初始(M):"+headMemory.getInit()/MB);
  156. System.out.println("\t最大(上限)(M):"+headMemory.getMax()/MB);
  157. System.out.println("\t当前(已使用)(M):"+headMemory.getUsed()/MB);
  158. System.out.println("\t提交的内存(已申请)(M):"+headMemory.getCommitted()/MB);
  159. System.out.println("\t使用率:"+headMemory.getUsed()*100/headMemory.getCommitted()+"%");
  160. System.out.println("non-head非堆:");
  161. MemoryUsage nonheadMemory = memory.getNonHeapMemoryUsage();
  162. System.out.println("\t初始(M):"+nonheadMemory.getInit()/MB);
  163. System.out.println("\t最大(上限)(M):"+nonheadMemory.getMax()/MB);
  164. System.out.println("\t当前(已使用)(M):"+nonheadMemory.getUsed()/MB);
  165. System.out.println("\t提交的内存(已申请)(M):"+nonheadMemory.getCommitted()/MB);
  166. System.out.println("\t使用率:"+nonheadMemory.getUsed()*100/nonheadMemory.getCommitted()+"%");
  167. }
  168. private static void printMemoryPoolInfo(){
  169. List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
  170. if(pools != null && !pools.isEmpty()){
  171. for(MemoryPoolMXBean pool : pools){
  172. //只打印一些各个内存区都有的属性,一些区的特殊属性,可看文档或百度
  173. //最大值,初始值,如果没有定义的话,返回-1,所以真正使用时,要注意
  174. System.out.println("vm内存区:\n\t名称="+pool.getName()+"\n\t所属内存管理者="+Arrays.deepToString(pool.getMemoryManagerNames())
  175. +"\n\t ObjectName="+pool.getObjectName()+"\n\t初始大小(M)="+pool.getUsage().getInit()/MB
  176. +"\n\t最大(上限)(M)="+pool.getUsage().getMax()/MB
  177. +"\n\t已用大小(M)="+pool.getUsage().getUsed()/MB
  178. +"\n\t已提交(已申请)(M)="+pool.getUsage().getCommitted()/MB
  179. +"\n\t使用率="+(pool.getUsage().getUsed()*100/pool.getUsage().getCommitted())+"%");
  180. }
  181. }
  182. }
  183. private static void printThreadInfo(){
  184. ThreadMXBean thread = ManagementFactory.getThreadMXBean();
  185. System.out.println("ObjectName="+thread.getObjectName());
  186. System.out.println("仍活动的线程总数="+thread.getThreadCount());
  187. System.out.println("峰值="+thread.getPeakThreadCount());
  188. System.out.println("线程总数(被创建并执行过的线程总数)="+thread.getTotalStartedThreadCount());
  189. System.out.println("当初仍活动的守护线程(daemonThread)总数="+thread.getDaemonThreadCount());
  190. //检查是否有死锁的线程存在
  191. long[] deadlockedIds =  thread.findDeadlockedThreads();
  192. if(deadlockedIds != null && deadlockedIds.length > 0){
  193. ThreadInfo[] deadlockInfos = thread.getThreadInfo(deadlockedIds);
  194. System.out.println("死锁线程信息:");
  195. System.out.println("\t\t线程名称\t\t状态\t\t");
  196. for(ThreadInfo deadlockInfo : deadlockInfos){
  197. System.out.println("\t\t"+deadlockInfo.getThreadName()+"\t\t"+deadlockInfo.getThreadState()
  198. +"\t\t"+deadlockInfo.getBlockedTime()+"\t\t"+deadlockInfo.getWaitedTime()
  199. +"\t\t"+deadlockInfo.getStackTrace().toString());
  200. }
  201. }
  202. long[] threadIds = thread.getAllThreadIds();
  203. if(threadIds != null && threadIds.length > 0){
  204. ThreadInfo[] threadInfos = thread.getThreadInfo(threadIds);
  205. System.out.println("所有线程信息:");
  206. System.out.println("\t\t线程名称\t\t\t\t\t状态\t\t\t\t\t线程id");
  207. for(ThreadInfo threadInfo : threadInfos){
  208. System.out.println("\t\t"+threadInfo.getThreadName()+"\t\t\t\t\t"+threadInfo.getThreadState()
  209. +"\t\t\t\t\t"+threadInfo.getThreadId());
  210. }
  211. }
  212. }
  213. private static boolean isSunOsMBean(OperatingSystemMXBean operatingSystem) {
  214. final String className = operatingSystem.getClass().getName();
  215. return "com.sun.management.OperatingSystem".equals(className)
  216. || "com.sun.management.UnixOperatingSystem".equals(className);
  217. }
  218. }
    1. ===========打印系统信息==========
    2. 系统名称:Windows 7
    3. 系统版本:6.1
    4. 操作系统的架构:amd64
    5. 可用的内核数:4
    6. 总物理内存(M):6041
    7. 已用物理内存(M):5387
    8. 剩余物理内存(M):653
    9. 总交换空间(M):18136
    10. 已用交换空间(M):15817
    11. 剩余交换空间(M):2319
    12. ===========打印编译信息==========
    13. JIT编译器名称:HotSpot 64-Bit Tiered Compilers
    14. 总编译时间:0秒
    15. ===========打印类加载信息==========
    16. 已加载类总数:410
    17. 已加载当前类:410
    18. 已卸载类总数:0
    19. ===========打印运行时信息==========
    20. 进程PID=386220
    21. jvm规范名称:Java Virtual Machine Specification
    22. jvm规范运营商:Oracle Corporation
    23. jvm规范版本:1.7
    24. jvm启动时间(毫秒):1447134405258
    25. 获取System.properties:{java.vm.version=24.80-b11, sun.jnu.encoding=GBK, java.vendor.url=http://java.oracle.com/, java.vm.info=mixed mode, user.dir=E:\test2\test200, sun.cpu.isalist=amd64, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, sun.os.patch.level=Service Pack 1, java.io.tmpdir=C:\Users\WEIJIA~1\AppData\Local\Temp\, user.home=E:\USER\weijianfei, java.awt.printerjob=sun.awt.windows.WPrinterJob, java.version=1.7.0_80, file.encoding.pkg=sun.io, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, file.encoding=UTF-8, line.separator=
    26. , sun.java.command=com.fei.JvmInfo, java.vm.specification.vendor=Oracle Corporation, java.vm.vendor=Oracle Corporation, java.class.path=E:\test2\test200\target\classes;E:\setup\maven\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;E:\setup\maven\org\slf4j\slf4j-api\1.6.1\slf4j-api-1.6.1.jar;E:\setup\maven\org\slf4j\slf4j-log4j12\1.6.1\slf4j-log4j12-1.6.1.jar;E:\setup\maven\log4j\log4j\1.2.16\log4j-1.2.16.jar;E:\setup\maven\jline\jline\0.9.94\jline-0.9.94.jar;E:\setup\maven\junit\junit\3.8.1\junit-3.8.1.jar;E:\setup\maven\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;E:\setup\maven\org\springframework\spring-webmvc\4.2.1.RELEASE\spring-webmvc-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-beans\4.2.1.RELEASE\spring-beans-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-context\4.2.1.RELEASE\spring-context-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-aop\4.2.1.RELEASE\spring-aop-4.2.1.RELEASE.jar;E:\setup\maven\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;E:\setup\maven\org\springframework\spring-core\4.2.1.RELEASE\spring-core-4.2.1.RELEASE.jar;E:\setup\maven\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;E:\setup\maven\org\springframework\spring-expression\4.2.1.RELEASE\spring-expression-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-web\4.2.1.RELEASE\spring-web-4.2.1.RELEASE.jar, sun.io.unicode.encoding=UnicodeLittle, user.variant=, os.arch=amd64, user.name=weijianfei, user.language=zh, java.runtime.version=1.7.0_80-b15, sun.boot.class.path=D:\jre1.7\lib\resources.jar;D:\jre1.7\lib\rt.jar;D:\jre1.7\lib\sunrsasign.jar;D:\jre1.7\lib\jsse.jar;D:\jre1.7\lib\jce.jar;D:\jre1.7\lib\charsets.jar;D:\jre1.7\lib\jfr.jar;D:\jre1.7\classes, sun.desktop=windows, sun.cpu.endian=little, awt.toolkit=sun.awt.windows.WToolkit, sun.boot.library.path=D:\jre1.7\bin, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, java.home=D:\jre1.7, java.endorsed.dirs=D:\jre1.7\lib\endorsed, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, java.runtime.name=Java(TM) SE Runtime Environment, java.library.path=D:\jre1.7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.6.0_45\bin;C:\Program Files\Java\jdk1.6.0_45\jre\bin;D:\soft\svn1.8\bin;D:\apache-maven-3.2.3\bin;D:\mysql5.7\MySQL Server 5.7\bin;D:\mysql5.7\MySQL Utilities 1.3.5\;D:\mongoDB;., file.separator=\, java.specification.vendor=Oracle Corporation, java.vm.specification.version=1.7, sun.java.launcher=SUN_STANDARD, user.timezone=, os.name=Windows 7, path.separator=;, java.ext.dirs=D:\jre1.7\lib\ext;C:\Windows\Sun\Java\lib\ext, sun.arch.data.model=64, java.specification.name=Java Platform API Specification, os.version=6.1, user.script=, user.country=CN, java.class.version=51.0, java.vendor=Oracle Corporation, java.vm.specification.name=Java Virtual Machine Specification, java.specification.version=1.7}
    27. jvm正常运行时间(毫秒):573
    28. jvm名称:Java HotSpot(TM) 64-Bit Server VM
    29. jvm运营商:Oracle Corporation
    30. jvm实现版本:24.80-b11
    31. vm参数:
    32. -Dfile.encoding=UTF-8
    33. 类路径:E:\test2\test200\target\classes;E:\setup\maven\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;E:\setup\maven\org\slf4j\slf4j-api\1.6.1\slf4j-api-1.6.1.jar;E:\setup\maven\org\slf4j\slf4j-log4j12\1.6.1\slf4j-log4j12-1.6.1.jar;E:\setup\maven\log4j\log4j\1.2.16\log4j-1.2.16.jar;E:\setup\maven\jline\jline\0.9.94\jline-0.9.94.jar;E:\setup\maven\junit\junit\3.8.1\junit-3.8.1.jar;E:\setup\maven\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;E:\setup\maven\org\springframework\spring-webmvc\4.2.1.RELEASE\spring-webmvc-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-beans\4.2.1.RELEASE\spring-beans-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-context\4.2.1.RELEASE\spring-context-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-aop\4.2.1.RELEASE\spring-aop-4.2.1.RELEASE.jar;E:\setup\maven\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;E:\setup\maven\org\springframework\spring-core\4.2.1.RELEASE\spring-core-4.2.1.RELEASE.jar;E:\setup\maven\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;E:\setup\maven\org\springframework\spring-expression\4.2.1.RELEASE\spring-expression-4.2.1.RELEASE.jar;E:\setup\maven\org\springframework\spring-web\4.2.1.RELEASE\spring-web-4.2.1.RELEASE.jar
    34. 引导类路径:D:\jre1.7\lib\resources.jar;D:\jre1.7\lib\rt.jar;D:\jre1.7\lib\sunrsasign.jar;D:\jre1.7\lib\jsse.jar;D:\jre1.7\lib\jce.jar;D:\jre1.7\lib\charsets.jar;D:\jre1.7\lib\jfr.jar;D:\jre1.7\classes
    35. 库路径:D:\jre1.7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.6.0_45\bin;C:\Program Files\Java\jdk1.6.0_45\jre\bin;D:\soft\svn1.8\bin;D:\apache-maven-3.2.3\bin;D:\mysql5.7\MySQL Server 5.7\bin;D:\mysql5.7\MySQL Utilities 1.3.5\;D:\mongoDB;.
    36. ===========打印内存管理器信息==========
    37. vm内存管理器:名称=CodeCacheManager,管理的内存区=[Code Cache],ObjectName=java.lang:type=MemoryManager,name=CodeCacheManager
    38. vm内存管理器:名称=PS Scavenge,管理的内存区=[PS Eden Space, PS Survivor Space],ObjectName=java.lang:type=GarbageCollector,name=PS Scavenge
    39. vm内存管理器:名称=PS MarkSweep,管理的内存区=[PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen],ObjectName=java.lang:type=GarbageCollector,name=PS MarkSweep
    40. ===========打印垃圾回收信息==========
    41. 垃圾收集器:名称=PS Scavenge,收集=0,总花费时间=0,内存区名称=[PS Eden Space, PS Survivor Space]
    42. 垃圾收集器:名称=PS MarkSweep,收集=0,总花费时间=0,内存区名称=[PS Eden Space, PS Survivor Space, PS Old Gen, PS Perm Gen]
    43. ===========打印vm内存信息==========
    44. head堆:
    45. 初始(M):94
    46. 最大(上限)(M):1344
    47. 当前(已使用)(M):1
    48. 提交的内存(已申请)(M):91
    49. 使用率:1%
    50. non-head非堆:
    51. 初始(M):23
    52. 最大(上限)(M):130
    53. 当前(已使用)(M):3
    54. 提交的内存(已申请)(M):23
    55. 使用率:13%
    56. ===========打印vm各内存区信息==========
    57. vm内存区:
    58. 名称=Code Cache
    59. 所属内存管理者=[CodeCacheManager]
    60. ObjectName=java.lang:type=MemoryPool,name=Code Cache
    61. 初始大小(M)=2
    62. 最大(上限)(M)=48
    63. 已用大小(M)=0
    64. 已提交(已申请)(M)=2
    65. 使用率=15%
    66. vm内存区:
    67. 名称=PS Eden Space
    68. 所属内存管理者=[PS MarkSweep, PS Scavenge]
    69. ObjectName=java.lang:type=MemoryPool,name=PS Eden Space
    70. 初始大小(M)=24
    71. 最大(上限)(M)=497
    72. 已用大小(M)=1
    73. 已提交(已申请)(M)=24
    74. 使用率=6%
    75. vm内存区:
    76. 名称=PS Survivor Space
    77. 所属内存管理者=[PS MarkSweep, PS Scavenge]
    78. ObjectName=java.lang:type=MemoryPool,name=PS Survivor Space
    79. 初始大小(M)=3
    80. 最大(上限)(M)=3
    81. 已用大小(M)=0
    82. 已提交(已申请)(M)=3
    83. 使用率=0%
    84. vm内存区:
    85. 名称=PS Old Gen
    86. 所属内存管理者=[PS MarkSweep]
    87. ObjectName=java.lang:type=MemoryPool,name=PS Old Gen
    88. 初始大小(M)=63
    89. 最大(上限)(M)=1008
    90. 已用大小(M)=0
    91. 已提交(已申请)(M)=63
    92. 使用率=0%
    93. vm内存区:
    94. 名称=PS Perm Gen
    95. 所属内存管理者=[PS MarkSweep]
    96. ObjectName=java.lang:type=MemoryPool,name=PS Perm Gen
    97. 初始大小(M)=21
    98. 最大(上限)(M)=82
    99. 已用大小(M)=2
    100. 已提交(已申请)(M)=21
    101. 使用率=13%
    102. ===========打印线程==========
    103. ObjectName=java.lang:type=Threading
    104. 仍活动的线程总数=5
    105. 峰值=5
    106. 线程总数(被创建并执行过的线程总数)=5
    107. 当初仍活动的守护线程(daemonThread)总数=4
    108. 所有线程信息:
    109. 线程名称                    状态                  线程id
    110. Attach Listener                 RUNNABLE                    5
    111. Signal Dispatcher                   RUNNABLE                    4
    112. Finalizer                   WAITING                 3
    113. Reference Handler                   WAITING                 2
    114. main                    RUNNABLE                    1

java 利用ManagementFactory获取jvm,os的一些信息--转的更多相关文章

  1. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  2. JAVA代码中获取JVM信息

    一.JAVA中获取JVM的信息 原理,利用JavaSDK自带的ManagementFactory类来获取. 二.获取信息 1.获取进程ID @Test public void test1() { Ru ...

  3. 在java代码中获取JVM参数(转)

    近日关注性能调优,关注JMX,发现java.lang.management.*之强大.同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考: MemoryMXBean memorymbean ...

  4. Java 获取JVM内存和物理内存信息

    package com.sysinfo; public class MonitorInfo { /** jvm可使用内存. */ private long totalMemory; /** jvm剩余 ...

  5. java利用Scanner获取键盘输入

    首发地址:我的网易博客 在运行一个java程序的时候,可能我们需要在运行的时候传递一些参数进去...咋办呢... java提供了一个Scanner类,利用这个类,我们可以很方便的获取键盘输入的参数.. ...

  6. java利用反射获取对象前后修改的内容(用于日志记录)

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  7. JAVA利用poi获取world文件内容

    本文主要简单介绍了利用poi包,读取world文件内容. 这个依然存在版本的问题,只能读取doc结尾的老版本文件. 话不多说,上代码: import java.io.File; import java ...

  8. java 利用Class获取类的属性信息

    package junereflect624; import java.lang.reflect.Modifier; class A { } interface B{ } interface C{ } ...

  9. java业务逻辑,利用hibernate获取所连接的数据库信息

    1.本人程序架构是springMVC+hibernate,这次的需求是要针对不同的数据库,做不同的处理. 2.获取所连接的数据库是什么,oracle?  mysql?  sql server?  基础 ...

随机推荐

  1. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. 启用 Open vSwitch - 每天5分钟玩转 OpenStack(127)

    Linux Bridge 和 Open vSwitch 是目前 OpenStack 中使用最广泛的两种虚机交换机技术. 前面各章节我们已经学习了如何用 Linux Bridge 作为 ML2 mech ...

  4. 谈谈一些有趣的CSS题目(九)-- 巧妙的实现 CSS 斜线

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  5. 开始学nodejs——net模块

    net模块的组成部分 详见 http://nodejs.cn/api/net.html 下面整理出了整个net模块的知识结构,和各个事件.方法.属性的用法 net.Server类 net.Socket ...

  6. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  7. AJAX 大全

    本章内容: 简介 伪 AJAX 原生 AJAX XmlHttpRequest 的属性.方法.跨浏览器支持 jQuery AJAX 常用方法 跨域 AJAX JsonP CORS 简单请求.复制请求.请 ...

  8. C# 用SoapUI调试WCF服务接口(WCF中包含用户名密码的验证)

    问题描述: 一般调试wcf程序可以直接建一个单元测试,直接调接口. 但是,这次,我还要测试在接口内的代码中看接收到的用户名密码是否正确,所以,单一的直接调用接口方法行不通, 然后就想办法通过soapU ...

  9. 如何让spring mvc web应用启动时就执行特定处理

    Asp.Net的应用中通过根目录下的Global.asax,在Application_Start方法中做一些初始化操作,比如:预先加载缓存项对网站热点数据进行预热,获取一些远程的配置信息等等. Spr ...

  10. 使用LogMaster4Net实现应用程序日志的集中管理

    日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道. 那么你是否曾今为这样的一些事情而困扰过: - 远程登录到不同的服务器,找到应用程序目然后查看应用日志: - 来回切换于不 ...