`

转一个 jmap 的基本使用方法

 
阅读更多

原文:http://hbluojiahui.blog.163.com/blog/static/31064767201282091643613/

1.  jmap -heap pid

         查看Java 堆(heap)使用情况

        using thread-local object allocation.
        Parallel GC with 4 thread(s)          //GC 方式          Heap Configuration:       //堆内存初始化配置
         MinHeapFreeRatio=40     //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
         MaxHeapFreeRatio=70  //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
         MaxHeapSize=512.0MB  //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
         NewSize  = 1.0MB          //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
         MaxNewSize =4095MB   //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
         OldSize  = 4.0MB            //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小
         NewRatio  = 8         //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
         SurvivorRatio = 8    //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值 
          PermSize= 16.0MB       //对应jvm启动参数-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小
          MaxPermSize=64.0MB  //对应jvm启动参数-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小

          Heap Usage:               //堆内存分步
          PS Young Generation
          Eden Space:          //Eden区内存分布
            capacity = 20381696 (19.4375MB)  //Eden区总容量
            used     = 20370032 (19.426376342773438MB)  //Eden区已使用
            free     = 11664 (0.0111236572265625MB)  //Eden区剩余容量
            99.94277218147106% used  //Eden区使用比率
         From Space:        //其中一个Survivor区的内存分布
             capacity = 8519680 (8.125MB)
             used     = 32768 (0.03125MB)
             free     = 8486912 (8.09375MB)
             0.38461538461538464% used
        To Space:            //另一个Survivor区的内存分布
            capacity = 9306112 (8.875MB)
            used     = 0 (0.0MB)
            free     = 9306112 (8.875MB)
            0.0% used
        PS Old Generation  //当前的Old区内存分布
            capacity = 366280704 (349.3125MB)
            used     = 322179848 (307.25464630126953MB)
            free     = 44100856 (42.05785369873047MB)
            87.95982001825573% used
        PS Perm Generation  //当前的 “永生代” 内存分布
            capacity = 32243712 (30.75MB)
            used     = 28918584 (27.57891082763672MB)
            free     = 3325128 (3.1710891723632812MB)
            89.68751488662348% used

      2. jmap -histo pid

        查看堆内存(histogram)中的对象数量,大小

                num     #instances         #bytes  class name

                序号         实例个数            字节数       类名    
        ----------------------------------------------
         1:       3174877      107858256  [C
         2:       3171499       76115976  java.lang.String
         3:       1397884       38122240  [B
         4:        214690       37785440  com.tongli.book.form.Book
         5:        107345       18892720  com.tongli.book.form.Book
         6:         65645       13953440  [Ljava.lang.Object;
         7:         59627        7648416  <constMethodKlass>
         8:        291852        7004448  java.util.HashMap$Entry
         9:        107349        6871176  [[B

         ..........

        total       9150732      353969416

      3. jmap dump  pid

          将内存使用的详细情况输出到文件

          jmap -dump:format=b,file=m.datpid

           用jhat命令可以参看 jhat -port 5000 m.dat 
        在浏览器中访问:http://localhost:5000/  查看详细信息

       sun 官方文档  http://download.Oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html

    可通过jmap --help了解详细使用方法:
Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print Java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -permstat            to print permanent generation statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

 

 


class name对应的就是Class文件里的class的标识
B代表byte
C代表char
D代表double
F代表float
I代表int
J代表long
Z代表boolean
前边有[代表数组,[I 就相当于int[]

对象用[L+类名表示

 

分享到:
评论

相关推荐

    Java虚拟机.pdf

    - 栈帧是栈的基本单位,每个方法调用都会创建一个新的栈帧。 - 栈具有先进后出的特点,因此在方法执行完毕后会自动释放相应的栈帧。 ##### 4. 本地方法栈(Native Method Stack) - 用于支持本地方法调用,与Java栈...

    jdk使用164个实例

    JDK使用164个实例,意味着这个压缩包可能包含了164个不同的Java编程示例,覆盖了JDK中各种类和接口的使用方法。这些实例对于学习和理解Java编程语言以及JDK中的核心功能非常有帮助。 首先,我们来讨论一下JDK中的...

    jdk宝典

    5. 可变参数(varargs):函数可以接受一个可变数量的参数,语法上表现为"Type... args",在内部会被转换为数组。 6. 注解(Annotation):注解是一种元数据,可以为编译器或JVM提供信息。例如,@Override表示方法...

    如何解决Java内存泄漏.pdf

    Java内存泄漏是一个开发者在开发和维护Java应用程序时必须面对的问题。内存泄漏会导致程序占用越来越多的内存资源,从而影响性能,甚至导致程序崩溃。本文将深入讨论Java内存泄漏的解决方法,提供一些工具和技巧,...

    Java高级面试题附答案汇总(2021年Java面试题及答案大全)

    要实现序列化,需要让一个类实现Serializable接口,并使用一个输出流来构造一个对象输出流,并通过writeObject(Object)方法将实现对象写出。 3. JVM Architecture(JVM架构) JVM架构是Java高级面试题中的一大热点...

    金九银十Java综合面试总结.pdf

    4. **Spring Boot启动流程**:Spring Boot的启动类上使用`@SpringBootApplication`注解表明这是一个Spring Boot应用,会自动扫描包并启动应用。Spring Boot会判断是否为Web应用,通过`WebApplicationType....

    北京圣思园科技有限公司JAVA面授培训大纲

    - **多人聊天程序**:综合运用Java集合、文件操作、网络通信、多线程等技术实现一个简单的多人聊天室,加深对Java核心技术的理解,并实践设计模式的应用。 通过以上内容的学习,学员能够全面掌握Java语言的基础知识...

    JProfiler 使用说明 如何分析 分析案例 中文版

    - **新建会话 (New Session)**:用于手动配置一个新的会话,或通过集成向导快速设置与特定服务器的连接。 - **转换会话 (Convert Session)**:将现有的会话转换为另一种格式。 - **打开快照 (Open Snapshot)**:加载...

    JDK命令详解

    当执行一个包含`public static void main(String[] args)` 方法的类时,`java` 命令会启动Java虚拟机(JVM)。例如,运行刚才编译的`HelloWorld.class`,命令如下: ```bash java HelloWorld ``` ### 3. `jar` ...

    jdk-18.0.2.1-windows-x64-bin.rar

    3. **Java文档生成器(javadoc)**:这是一个用于自动生成API文档的工具,帮助开发者理解和使用库中的类和方法。 4. **Java打包工具(jar)**:它用于创建、管理和提取.jar文件,这是一种包含多个类文件和相关资源...

    最新版linux jdk-11.0.12_linux-x64_bin.tar.gz

    Linux JDK 11.0.12 是Java开发工具包(Java Development Kit)的一个版本,专为Linux操作系统设计,适用于64位(x64)架构。这个版本的JDK是Oracle公司发布的,包含了编译、调试、性能优化等开发Java应用程序所需的...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    - **VisualVM**:一个功能强大的工具,可以监控JVM的状态,包括CPU使用率、内存使用情况等。 - **JConsole**:提供了对运行中的JVM进行监控的功能。 - **MAT(Memory Analyzer Tool)**:专门用于分析内存泄漏问题。...

    java 2语言命令详解 JAVA程序设计

    例如,如果你有一个名为`HelloWorld.java`的源文件,你可以使用以下命令将其编译: ``` javac HelloWorld.java ``` 2. `java`:这个命令用于执行编译后的Java类。当你有`HelloWorld.class`时,可以通过以下方式...

    java经典面试题

    - `Collections` 是一个工具类,提供了一些静态方法来操作集合。 14. **`try-catch-finally` 语句结构**: - `try` 块中编写可能会抛出异常的代码。 - `catch` 块捕获异常。 - `finally` 块总是被执行,即使...

    Java核心技术大全

    - Java I/O是Java中处理输入输出的基本方式,了解`java.io.*`包下的基本类如`InputStream`、`OutputStream`等的使用方法。 - Java NIO(Non-blocking I/O)提供了更高效的I/O操作方式,通过`java.nio.*`包下的类如`...

    JVM基础知识

    - **Java方法栈**:每个线程启动时都会分配一个栈,栈帧是栈的基本单元,它包含了局部变量区、操作数栈和栈帧数据区等信息。 ##### 2. 运行时内存 JVM在运行时会根据不同的内存区域进行管理。除了上述提到的方法区...

    java面试题_jvm(21题)

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的执行环境,负责解析字节码并将其转换为实际的机器指令。在Java面试中,JVM相关的知识经常是考察的重点,因为它直接关系到程序的性能优化和内存管理。以下是对...

    java安装包.zip

    对于Java学习者而言,了解这些基础工具的使用方法至关重要,因为它们构成了Java开发的基础环境。在安装了JDK后,开发者可以通过配置环境变量(如JAVA_HOME、PATH)来确保系统能够正确找到并使用这些工具。同时,学习...

    Java宝典大全

    `javassist`是一个强大的字节码操作库,可用于生成新的类或修改现有类的字节码。 - **序列化**: 序列化是指将对象的状态转换成可以存储或传输的形式的过程。Java提供了`Serializable`接口用于支持对象的序列化。 ##...

    java学习内容[归类].pdf

    Java是一种广泛使用的高级编程语言,尤其在企业级应用开发中占据主导地位。本文将深入探讨Java的学习内容,...通过全面学习这些知识点,一个Java开发者能够具备扎实的理论基础和实践经验,从而在软件开发领域取得成功。

Global site tag (gtag.js) - Google Analytics