原文地址: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. 札记:android手势识别,MotionEvent

    摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...

  2. [C#] 简单的 Helper 封装 -- RandomHelper

    using System; namespace Wen.Helpers { /// <summary> /// 随机数助手 /// </summary> public seal ...

  3. 如何将VCSA添加到微软域控环境,并且实现微软域账号登陆vCenter

    v:* { } o:* { } w:* { } .shape { } p.msonormal,li.msonormal,div.msonormal { margin: 0cm; margin-bott ...

  4. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  5. Asp.net Core 初探(发布和部署Linux)

    前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Ne ...

  6. 移动应用App测试与质量管理一

    测试工程师 基于Html的WebApp测试, 现在一些移动App混Html5 HTML5性能测试 兼容性 整理后的脑图 测试招聘 弱化大量技术考察 看重看问题的高度 看重潜力 测试经验 质量管理 专项 ...

  7. Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

  8. 笔记:Memory Notification: Library Cache Object loaded into SGA

    笔记:Memory Notification: Library Cache Object loaded into SGA在警告日志中发现一些这样的警告信息:Mon Nov 21 14:24:22 20 ...

  9. 关于javascript中的this关键字

    this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...

  10. PC虚拟现实应用的性能分析与优化:从CPU角度切入

    如今,虚拟现实 (VR) 技术正日益受到欢迎,这主要得益于遵循摩尔定律的技术进步让这一全新体验在技术上成为可能.尽管虚拟现实能给用户带来身临其境般的超凡体验,但相比传统应用,其具有双目渲染.低延迟.高 ...