`

在java代码中获取JVM参数

 
阅读更多

近日关注性能调优,关注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参数的方法

    以下是一些在Java代码中获取JVM参数的方法: 首先,我们可以使用`ManagementFactory`类来获取关于JVM内存使用的详细信息。`ManagementFactory`是Java提供的一个内置管理接口,它提供了对运行时系统、线程、类加载器...

    java获得jvm内存大小

    本文将深入探讨如何在Java中获取JVM内存大小,包括堆内存的总量、最大值以及剩余空间,并解析给定代码片段中的关键概念。 ### JVM内存模型 在讨论如何获取JVM内存大小之前,首先需要理解JVM的内存布局。JVM内存...

    java 查看JVM中所有的线程的活动状况

    在Java编程环境中,了解JVM(Java虚拟机)中所有线程的活动状态对于调试多线程程序至关重要。本文将详细讲解如何查看JVM中的线程活动情况,并提供相关示例代码。 首先,Java提供了`java.lang.management....

    JAVA命令大全-JVM设置.rar

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。JVM(Java虚拟机)是Java平台的核心组成部分,它负责运行Java程序。理解并熟练掌握JVM设置对于优化应用程序性能至关重要。这份“JAVA命令...

    揭秘Java虚拟机-JVM设计原理与实现

    《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...

    关键业务系统JVM参数推荐

    例如,ElasticSearch和Cassandra在启动脚本中对JVM参数进行了细致的配置,这些都是经过大量实践验证的配置。 2. **VJTools的jvm-options.sh**:VJTools提供了一个jvm-options.sh脚本,可以根据实际需求稍作修改...

    JVM.zip_java jvm_jvm

    "JVM.zip"可能是一个包含了与JVM相关的工具或示例代码的压缩包,特别是用于获取运行中的JVM系统的参数。这通常是开发人员为了监控和优化Java应用程序性能的重要手段。 在Java中,`SystemInfo`类的出现很可能是为了...

    使用C++创建java虚拟机JVM,使用JNI调用java函数.zip

    在提供的资源"使用C++创建java虚拟机JVM,使用JNI调用java函数"中,可能详细介绍了以上步骤的实际应用,包括代码示例和可能遇到的问题及解决方案。通过学习和实践这个教程,开发者可以更好地理解和掌握C++与Java之间...

    jvm启动参数大全

    Java虚拟机(JVM)是Java程序运行的基础,它负责解析字节码并执行Java代码。在开发和调优Java应用时,了解和使用JVM启动参数至关重要。这些参数可以调整JVM的行为,优化内存分配、垃圾收集、线程设置等。以下是一些...

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    3. **利用注册表**:对于Windows环境下的Tomcat,还可以通过修改注册表来调整JVM参数。具体路径为`HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftwareFoundation\TomcatServiceManager\Tomcat6\Parameters\JavaOptions`,...

    Java虚拟机-jvm故障诊断与性能优化-源码

    3. **JVM参数调优** - **堆内存设置**:如-Xms、-Xmx控制堆的初始和最大大小。 - **新生代与老年代比例**:-XX:NewRatio控制两者的比例。 - **存活对象判定**:-XX:SurvivorRatio定义Eden与Survivor区的比例。 -...

    java获取系统参数

    在Java编程中,获取系统参数是一项基本任务,用于了解运行Java程序的环境信息。Java提供了`java.lang.System`类的`getProperties()`方法来获取这些信息。这个方法返回一个`Properties`对象,该对象包含了关于Java...

    Java2Pas(Java代码转换成Delphi代码)

    3. 注释保留:转换过程中,Java源代码中的注释通常会被保留在转换后的Delphi代码中,方便理解和修改。 4. 异常处理:Java的异常处理机制(try-catch-finally)会转换为Delphi的except-on-finally结构。 5. 静态与非...

    jvm工具、参数调优&调试技巧

    在Java开发中,理解并掌握JVM(Java虚拟机)的工作原理,以及如何进行工具使用、参数调优和问题调试,是提升程序性能的关键步骤。本文将深入探讨这些核心知识点,帮助开发者优化应用程序的运行效率。 一、JVM工具...

    java代码生成工具

    在Java代码生成工具中,MyBatis的相关Mapper XML文件和Mapper接口会被自动生成,便于与数据库进行交互。 4. **Bootstrap**: Bootstrap是Twitter开源的一个前端框架,提供了丰富的CSS和JavaScript组件,用于构建响应...

    java源代码,java源代码

    9. **泛型**:Java 5引入的泛型提升了代码的类型安全性和可读性,允许在类、接口和方法中使用类型参数。 10. **注解(Annotation)**:注解是一种元数据,可以提供编译器和JVM在编译时或运行时进行检查和处理的信息...

    易语言JAVA调用 例子

    易语言JAVA调用是将Java代码与易语言程序进行交互的一种技术,这使得开发者能够利用易语言编写主程序,同时利用Java的丰富库资源。在本例子中,我们看到几个关键文件,它们分别是: 1. **Test.class**:这是一个...

    java-基础/jvm/多线程

    - Java中所有参数传递都是值传递,对象作为参数传递时,传递的是对象引用的副本,而非对象本身。 15. **IO流**: - Java的IO流分为字节流和字符流,BIO( Blocking I/O)、NIO(Non-blocking I/O)、AIO...

    jvm瓶颈定位 java jvm 学习

    5. **JVM参数调优** - `-Xms`和`-Xmx`:设置堆内存初始大小和最大大小。 - `-XX:NewRatio`:新生代和老年代的内存比例。 - `-XX:SurvivorRatio`:Eden区和Survivor区的比例。 - `-XX:+UseG1GC`或`-XX:+UseZGC`:...

    java应用JVM的GC频率观察方法

    1. 在开发和测试环境下,可以通过配置JVM参数来输出GC日志。例如,添加`-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime`参数,可以详细记录GC事件,包括简要信息、...

Global site tag (gtag.js) - Google Analytics