原文: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+类名表示
相关推荐
- 栈帧是栈的基本单位,每个方法调用都会创建一个新的栈帧。 - 栈具有先进后出的特点,因此在方法执行完毕后会自动释放相应的栈帧。 ##### 4. 本地方法栈(Native Method Stack) - 用于支持本地方法调用,与Java栈...
JDK使用164个实例,意味着这个压缩包可能包含了164个不同的Java编程示例,覆盖了JDK中各种类和接口的使用方法。这些实例对于学习和理解Java编程语言以及JDK中的核心功能非常有帮助。 首先,我们来讨论一下JDK中的...
5. 可变参数(varargs):函数可以接受一个可变数量的参数,语法上表现为"Type... args",在内部会被转换为数组。 6. 注解(Annotation):注解是一种元数据,可以为编译器或JVM提供信息。例如,@Override表示方法...
Java内存泄漏是一个开发者在开发和维护Java应用程序时必须面对的问题。内存泄漏会导致程序占用越来越多的内存资源,从而影响性能,甚至导致程序崩溃。本文将深入讨论Java内存泄漏的解决方法,提供一些工具和技巧,...
要实现序列化,需要让一个类实现Serializable接口,并使用一个输出流来构造一个对象输出流,并通过writeObject(Object)方法将实现对象写出。 3. JVM Architecture(JVM架构) JVM架构是Java高级面试题中的一大热点...
4. **Spring Boot启动流程**:Spring Boot的启动类上使用`@SpringBootApplication`注解表明这是一个Spring Boot应用,会自动扫描包并启动应用。Spring Boot会判断是否为Web应用,通过`WebApplicationType....
- **多人聊天程序**:综合运用Java集合、文件操作、网络通信、多线程等技术实现一个简单的多人聊天室,加深对Java核心技术的理解,并实践设计模式的应用。 通过以上内容的学习,学员能够全面掌握Java语言的基础知识...
- **新建会话 (New Session)**:用于手动配置一个新的会话,或通过集成向导快速设置与特定服务器的连接。 - **转换会话 (Convert Session)**:将现有的会话转换为另一种格式。 - **打开快照 (Open Snapshot)**:加载...
当执行一个包含`public static void main(String[] args)` 方法的类时,`java` 命令会启动Java虚拟机(JVM)。例如,运行刚才编译的`HelloWorld.class`,命令如下: ```bash java HelloWorld ``` ### 3. `jar` ...
3. **Java文档生成器(javadoc)**:这是一个用于自动生成API文档的工具,帮助开发者理解和使用库中的类和方法。 4. **Java打包工具(jar)**:它用于创建、管理和提取.jar文件,这是一种包含多个类文件和相关资源...
Linux JDK 11.0.12 是Java开发工具包(Java Development Kit)的一个版本,专为Linux操作系统设计,适用于64位(x64)架构。这个版本的JDK是Oracle公司发布的,包含了编译、调试、性能优化等开发Java应用程序所需的...
- **VisualVM**:一个功能强大的工具,可以监控JVM的状态,包括CPU使用率、内存使用情况等。 - **JConsole**:提供了对运行中的JVM进行监控的功能。 - **MAT(Memory Analyzer Tool)**:专门用于分析内存泄漏问题。...
例如,如果你有一个名为`HelloWorld.java`的源文件,你可以使用以下命令将其编译: ``` javac HelloWorld.java ``` 2. `java`:这个命令用于执行编译后的Java类。当你有`HelloWorld.class`时,可以通过以下方式...
- `Collections` 是一个工具类,提供了一些静态方法来操作集合。 14. **`try-catch-finally` 语句结构**: - `try` 块中编写可能会抛出异常的代码。 - `catch` 块捕获异常。 - `finally` 块总是被执行,即使...
- Java I/O是Java中处理输入输出的基本方式,了解`java.io.*`包下的基本类如`InputStream`、`OutputStream`等的使用方法。 - Java NIO(Non-blocking I/O)提供了更高效的I/O操作方式,通过`java.nio.*`包下的类如`...
- **Java方法栈**:每个线程启动时都会分配一个栈,栈帧是栈的基本单元,它包含了局部变量区、操作数栈和栈帧数据区等信息。 ##### 2. 运行时内存 JVM在运行时会根据不同的内存区域进行管理。除了上述提到的方法区...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的执行环境,负责解析字节码并将其转换为实际的机器指令。在Java面试中,JVM相关的知识经常是考察的重点,因为它直接关系到程序的性能优化和内存管理。以下是对...
对于Java学习者而言,了解这些基础工具的使用方法至关重要,因为它们构成了Java开发的基础环境。在安装了JDK后,开发者可以通过配置环境变量(如JAVA_HOME、PATH)来确保系统能够正确找到并使用这些工具。同时,学习...
`javassist`是一个强大的字节码操作库,可用于生成新的类或修改现有类的字节码。 - **序列化**: 序列化是指将对象的状态转换成可以存储或传输的形式的过程。Java提供了`Serializable`接口用于支持对象的序列化。 ##...
Java是一种广泛使用的高级编程语言,尤其在企业级应用开发中占据主导地位。本文将深入探讨Java的学习内容,...通过全面学习这些知识点,一个Java开发者能够具备扎实的理论基础和实践经验,从而在软件开发领域取得成功。