原文地址: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. C# DateTime与时间戳转换

    C# DateTime与时间戳的相互转换,包括JavaScript时间戳和Unix的时间戳. 1. 什么是时间戳 首先要清楚JavaScript与Unix的时间戳的区别: JavaScript时间戳: ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  3. ABP文档 - 目录

    ABP框架 概览 介绍 多层结构 模块系统 启动配置 多租户 集成OWIN 共同结构 依赖注入 会话 缓存 日志 设置管理 时间 领域层 实体 值对象(新) 仓储 领域服务 工作单元 领域事件(Eve ...

  4. Js new到底发生了什么

    在Js中,我们使用了new关键字来进行实例化 那么在这个new的过程中到底发生了什么? 关于构造函数的return 正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象. 但是, ...

  5. .Net多线程编程—任务Task

    1 System.Threading.Tasks.Task简介 一个Task表示一个异步操作,Task的创建和执行是独立的. 只读属性: 返回值 名称 说明 object AsyncState 表示在 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. 参考bootstrap中的popover.js的css画消息弹框

    前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...

  8. 访问者模式(visitorpattern)

    /** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块 ...

  9. 原生JS实现-星级评分系统

    今天我又写了个很酷的实例:星级评分系统(可自定义星星个数.显示信息) sufuStar.star();使用默认值5个星星,默认信息 var msg = [........]; sufuStar.sta ...

  10. Oracle第一步

    Oracle 启动数据库 Startup [NOMOUNT|MOUNT|OPEN|FORCE] [restrict] [pfile=filename] 启动实例,加载数据库,启动数据库 oRACLE关 ...