近日关注性能调优,关注JMX,发现java.lang.management.*之强大。同时查阅了资料,整合一版关于JVM参数获取的note,仅供参考:
MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean(); MemoryUsage usage = memorymbean.getHeapMemoryUsage(); System.out.println("INIT HEAP: " + usage.getInit()); System.out.println("MAX HEAP: " + usage.getMax()); System.out.println("USE HEAP: " + usage.getUsed()); System.out.println("\nFull Information:"); System.out.println("Heap Memory Usage: " + memorymbean.getHeapMemoryUsage()); System.out.println("Non-Heap Memory Usage: " + memorymbean.getNonHeapMemoryUsage()); List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments(); System.out.println("===================java options=============== "); System.out.println(inputArguments); System.out.println("=======================通过java来获取相关系统状态============================ "); int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位 System.out.println("总的内存量 i is "+i); int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量 System.out.println("空闲内存量 j is "+j); System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024); System.out.println("=======================OperatingSystemMXBean============================ "); OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); // System.out.println(osm.getFreeSwapSpaceSize()/1024); // System.out.println(osm.getFreePhysicalMemorySize()/1024); // System.out.println(osm.getTotalPhysicalMemorySize()/1024); //获取操作系统相关信息 System.out.println("osm.getArch() "+osm.getArch()); System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors()); //System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize()); System.out.println("osm.getName() "+osm.getName()); //System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime()); System.out.println("osm.getVersion() "+osm.getVersion()); //获取整个虚拟机内存使用情况 System.out.println("=======================MemoryMXBean============================ "); MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean(); System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage()); System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage()); //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况 System.out.println("=======================ThreadMXBean============================ "); ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean(); System.out.println("getThreadCount "+tm.getThreadCount()); System.out.println("getPeakThreadCount "+tm.getPeakThreadCount()); System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime()); System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount()); System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime()); //当前编译器情况 System.out.println("=======================CompilationMXBean============================ "); CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean(); System.out.println("getName "+gm.getName()); System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime()); //获取多个内存池的使用情况 System.out.println("=======================MemoryPoolMXBean============================ "); List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans(); for(MemoryPoolMXBean mpm:mpmList){ System.out.println("getUsage "+mpm.getUsage()); System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString()); } //获取GC的次数以及花费时间之类的信息 System.out.println("=======================MemoryPoolMXBean============================ "); List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans(); for(GarbageCollectorMXBean gcm:gcmList){ System.out.println("getName "+gcm.getName()); System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames()); } //获取运行时信息 System.out.println("=======================RuntimeMXBean============================ "); RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean(); System.out.println("getClassPath "+rmb.getClassPath()); System.out.println("getLibraryPath "+rmb.getLibraryPath()); System.out.println("getVmVersion "+rmb.getVmVersion());
运行结果如下:
INIT HEAP: 268435456 MAX HEAP: 1065484288 USE HEAP: 331632 Full Information: Heap Memory Usage: init = 268435456(262144K) used = 331632(323K) committed = 266403840(260160K) max = 1065484288(1040512K) Non-Heap Memory Usage: init = 134381568(131232K) used = 2607888(2546K) committed = 134709248(131552K) max = 570425344(557056K) ==========java options===== [-Xms256m, -Xmx1024m, -XX:PermSize=128M, -XX:MaxPermSize=512m, -Dfile.encoding=UTF-8] =======================通过java来获取相关系统状态============================ 总的内存量 i is 260160 空闲内存量 j is 259836 最大内存量 is 1040512 =======================OperatingSystemMXBean============================ osm.getArch() x86 osm.getAvailableProcessors() 2 osm.getName() Windows 7 osm.getVersion() 6.1 =======================MemoryMXBean============================ getHeapMemoryUsage init = 268435456(262144K) used = 331632(323K) committed = 266403840(260160K) max = 1065484288(1040512K) getNonHeapMemoryUsage init = 134381568(131232K) used = 2638064(2576K) committed = 134709248(131552K) max = 570425344(557056K) =======================ThreadMXBean============================ getThreadCount 5 getPeakThreadCount 5 getCurrentThreadCpuTime 93600600 getDaemonThreadCount 4 getCurrentThreadUserTime 31200200 =======================CompilationMXBean============================ getName HotSpot Client Compiler getTotalCompilationTime 1 =======================MemoryPoolMXBean============================ getUsage init = 163840(160K) used = 473920(462K) committed = 491520(480K) max = 33554432(32768K) getMemoryManagerNames [Ljava.lang.String;@15b7986 getUsage init = 16580608(16192K) used = 331632(323K) committed = 16580608(16192K) max = 66060288(64512K) getMemoryManagerNames [Ljava.lang.String;@1d9dc39 getUsage init = 2031616(1984K) used = 0(0K) committed = 2031616(1984K) max = 8257536(8064K) getMemoryManagerNames [Ljava.lang.String;@93dcd getUsage init = 247791616(241984K) used = 0(0K) committed = 247791616(241984K) max = 991166464(967936K) getMemoryManagerNames [Ljava.lang.String;@b89838 getUsage init = 134217728(131072K) used = 2213312(2161K) committed = 134217728(131072K) max = 536870912(524288K) getMemoryManagerNames [Ljava.lang.String;@111a3ac =======================MemoryPoolMXBean============================ getName Copy getMemoryPoolNames [Ljava.lang.String;@110b053 getName MarkSweepCompact getMemoryPoolNames [Ljava.lang.String;@a83b8a =======================RuntimeMXBean============================ getClassPath E:\workspaces\mss-workspace\Jmx\bin;E:\workspaces\mss-workspace\Jmx\lib\jmxtools.jar 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; getVmVersion 14.0-b16
相关推荐
以下是一些在Java代码中获取JVM参数的方法: 首先,我们可以使用`ManagementFactory`类来获取关于JVM内存使用的详细信息。`ManagementFactory`是Java提供的一个内置管理接口,它提供了对运行时系统、线程、类加载器...
本文将深入探讨如何在Java中获取JVM内存大小,包括堆内存的总量、最大值以及剩余空间,并解析给定代码片段中的关键概念。 ### JVM内存模型 在讨论如何获取JVM内存大小之前,首先需要理解JVM的内存布局。JVM内存...
在Java编程环境中,了解JVM(Java虚拟机)中所有线程的活动状态对于调试多线程程序至关重要。本文将详细讲解如何查看JVM中的线程活动情况,并提供相关示例代码。 首先,Java提供了`java.lang.management....
Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。JVM(Java虚拟机)是Java平台的核心组成部分,它负责运行Java程序。理解并熟练掌握JVM设置对于优化应用程序性能至关重要。这份“JAVA命令...
《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...
例如,ElasticSearch和Cassandra在启动脚本中对JVM参数进行了细致的配置,这些都是经过大量实践验证的配置。 2. **VJTools的jvm-options.sh**:VJTools提供了一个jvm-options.sh脚本,可以根据实际需求稍作修改...
"JVM.zip"可能是一个包含了与JVM相关的工具或示例代码的压缩包,特别是用于获取运行中的JVM系统的参数。这通常是开发人员为了监控和优化Java应用程序性能的重要手段。 在Java中,`SystemInfo`类的出现很可能是为了...
Java虚拟机(JVM)是Java程序运行的基础,它负责解析字节码并执行Java代码。在开发和调优Java应用时,了解和使用JVM启动参数至关重要。这些参数可以调整JVM的行为,优化内存分配、垃圾收集、线程设置等。以下是一些...
在提供的资源"使用C++创建java虚拟机JVM,使用JNI调用java函数"中,可能详细介绍了以上步骤的实际应用,包括代码示例和可能遇到的问题及解决方案。通过学习和实践这个教程,开发者可以更好地理解和掌握C++与Java之间...
3. **利用注册表**:对于Windows环境下的Tomcat,还可以通过修改注册表来调整JVM参数。具体路径为`HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftwareFoundation\TomcatServiceManager\Tomcat6\Parameters\JavaOptions`,...
3. **JVM参数调优** - **堆内存设置**:如-Xms、-Xmx控制堆的初始和最大大小。 - **新生代与老年代比例**:-XX:NewRatio控制两者的比例。 - **存活对象判定**:-XX:SurvivorRatio定义Eden与Survivor区的比例。 -...
在Java编程中,获取系统参数是一项基本任务,用于了解运行Java程序的环境信息。Java提供了`java.lang.System`类的`getProperties()`方法来获取这些信息。这个方法返回一个`Properties`对象,该对象包含了关于Java...
3. 注释保留:转换过程中,Java源代码中的注释通常会被保留在转换后的Delphi代码中,方便理解和修改。 4. 异常处理:Java的异常处理机制(try-catch-finally)会转换为Delphi的except-on-finally结构。 5. 静态与非...
在Java开发中,理解并掌握JVM(Java虚拟机)的工作原理,以及如何进行工具使用、参数调优和问题调试,是提升程序性能的关键步骤。本文将深入探讨这些核心知识点,帮助开发者优化应用程序的运行效率。 一、JVM工具...
在Java代码生成工具中,MyBatis的相关Mapper XML文件和Mapper接口会被自动生成,便于与数据库进行交互。 4. **Bootstrap**: Bootstrap是Twitter开源的一个前端框架,提供了丰富的CSS和JavaScript组件,用于构建响应...
易语言JAVA调用是将Java代码与易语言程序进行交互的一种技术,这使得开发者能够利用易语言编写主程序,同时利用Java的丰富库资源。在本例子中,我们看到几个关键文件,它们分别是: 1. **Test.class**:这是一个...
9. **泛型**:Java 5引入的泛型提升了代码的类型安全性和可读性,允许在类、接口和方法中使用类型参数。 10. **注解(Annotation)**:注解是一种元数据,可以提供编译器和JVM在编译时或运行时进行检查和处理的信息...
- Java中所有参数传递都是值传递,对象作为参数传递时,传递的是对象引用的副本,而非对象本身。 15. **IO流**: - Java的IO流分为字节流和字符流,BIO( Blocking I/O)、NIO(Non-blocking I/O)、AIO...
5. **JVM参数调优** - `-Xms`和`-Xmx`:设置堆内存初始大小和最大大小。 - `-XX:NewRatio`:新生代和老年代的内存比例。 - `-XX:SurvivorRatio`:Eden区和Survivor区的比例。 - `-XX:+UseG1GC`或`-XX:+UseZGC`:...
1. 在开发和测试环境下,可以通过配置JVM参数来输出GC日志。例如,添加`-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime`参数,可以详细记录GC事件,包括简要信息、...