java 15:用jmap查看堆内存相关信息
2023-09-14 09:01:18 时间
一,jmap查看帮助:
[lhdop@blog ~]$ jmap --help Usage: jmap -clstats <pid> to connect to running process and print class loader statistics jmap -finalizerinfo <pid> to connect to running process and print information on objects awaiting finalization jmap -histo[:[<histo-options>]] <pid> to connect to running process and print histogram of java object heap jmap -dump:<dump-options> <pid> to connect to running process and dump java heap jmap -? -h --help to print this help message dump-options: live dump only live objects all dump all objects in the heap (default if one of "live" or "all" is not specified format=b binary format file=<file> dump heap to <file> Example: jmap -dump:live,format=b,file=heap.bin <pid> histo-options: live count only live objects all count all objects in the heap (default if one of "live" or "all" is not specified) file=<file> dump data to <file> Example: jmap -histo:live,file=/tmp/histo.data <pid>
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
或: https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,jmap的常用例子
1,显示堆中对象的统计信息
[lhdop@blog ~]$ jmap -histo:live 5426 | more No dump file specified num #instances #bytes class name (module) ------------------------------------------------------- 1: 262144 6291456 org.apache.logging.log4j.core.async.AsyncLoggerConfigDisruptor$Log4jEventWrapper 2: 77084 5499016 [B (java.base@15) 3: 5678 4699536 [I (java.base@15) 4: 72731 1745544 java.lang.String (java.base@15) 5: 11294 1692816 [Ljava.lang.Object; (java.base@15) 6: 48063 1538016 java.util.concurrent.ConcurrentHashMap$Node (java.base@15) 7: 12598 1501528 java.lang.Class (java.base@15) 8: 15105 1329240 java.lang.reflect.Method (java.base@15) 9: 547 902144 [C (java.base@15) 10: 18089 578848 java.util.HashMap$Node (java.base@15) 11: 5975 530328 [Ljava.util.HashMap$Node; (java.base@15) 12: 12632 505280 java.util.LinkedHashMap$Entry (java.base@15) 13: 445 482320 [Ljava.util.concurrent.ConcurrentHashMap$Node; (java.base@15) 14: 25730 411680 java.lang.Object (java.base@15) 15: 6481 362936 java.util.LinkedHashMap (java.base@15) 16: 11761 266568 [Ljava.lang.Class; (java.base@15) ...
2,打印类加载器信息
[lhdop@blog ~]$ jmap -clstats 5426 ClassLoader Parent CLD* Classes ChunkSz BlockSz Type 0x00000008000a6190 0x0000000800b98840 0x00007f86240485a0 1 3072 2024 jdk.internal.reflect.DelegatingClassLoader 0x00000008000a6190 0x0000000800b98840 0x00007f8638279130 1 6144 4032 jdk.internal.reflect.DelegatingClassLoader 0x00000008000a6190 0x000000080007f230 0x00007f8628201320 1 4096 3232 jdk.internal.reflect.DelegatingClassLoader 0x00000008000a6190 0x0000000800b98840 0x00007f86b94f11a0 1 6144 3968 jdk.internal.reflect.DelegatingClassLoader 0x00000008000a6190 0x0000000800b98840 0x0000565402b9e740 1 3072 2024 jdk.internal.reflect.DelegatingClassLoader 0x00000008000a6190 0x000000080007f230 0x00007f8648278e70 1 6144 4784 jdk.internal.reflect.DelegatingClassLoader 0x00000008000a6190 0x0000000800b98840 0x00007f863000a560 1 6144 4056 jdk.internal.reflect.DelegatingClassLoader … Total = 456 12549 65325056 64231288 ChunkSz: Total size of all allocated metaspace chunks BlockSz: Total size of all allocated metaspace blocks (each chunk has several blocks)
3,打印等待终结的对象信息
[lhdop@blog ~]$ jmap -finalizerinfo 5426 No instances waiting for finalization found
4,以hprof二进制格式转储Java堆到指定filename的文件中
[lhdop@blog ~]$ jmap -dump:live,format=b,file=heap.hprof 5426 Dumping heap to /home/lhdop/heap.hprof ... Heap dump file created [60868455 bytes in 0.264 secs]
查看生成的二进制文件:
[lhdop@blog ~]$ ll heap.hprof -rw------- 1 lhdop lhdop 60868455 Mar 26 17:08 heap.hprof
说明:
dump的文件可以使用eclipse的MAT或jdk自带的jvisualvm分析内存泄露和内存溢出问题。
三,查看java版本:
[lhdop@blog tools]$ java --version java 15 2020-09-15 Java(TM) SE Runtime Environment (build 15+36-1562) Java HotSpot(TM) 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)
相关文章
- 面试:精通Java;面试官:来讲一下JVM虚拟机内存模型的最底层原理,必须说详细说清楚,知其所以然。看完后,你还敢在简历上写精通Java吗?
- java 上传文件接口_Java接口实现文件上传
- Java进阶:java开源商城系统源码
- Java继承的概念及方法
- java和基岩版区别_我的世界基岩版与Java版有什么区别?「建议收藏」
- java maven 配置环境变量_maven 环境变量的配置详解
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」
- java中的io流知识总结_java中的io流开发用的多吗
- linux 查看 java 进程内存占用情况[通俗易懂]
- Java HashMap原理
- 从 Java 的角度看待 Go 的编码规范和性能调优| 青训营笔记
- Java 中static和非static的区别(方法和变量)
- Java 循环结构
- 超简单!Java 项目自动生成接口文档教程
- Java学习笔记之九java二维数组及其多维数组的内存应用拓展延伸详解编程语言
- 在Linux中查看Java线程:一种方法(linux查看java线程)
- 数据如何使用Java读取MySQL数据(java读取mysql)
- Linux下Java开发:给初学者的指引(linux下java编程)
- Java中实现复制文件或文件夹详解编程语言
- Java问题-java进程占用内存过高,排查原因详解编程语言
- 极速搭建Java连接SqlServer数据库(java连接sqlserver)
- 解析Java中的Linux路径(java中linux路径)
- 处理Java中实现Redis过期数据管理(redisjava过期)
- Redis Java过期机制实现原理及应用(redisjava过期)
- 策略Java中使用Redis实现过期策略(redisjava过期)
- Linux和Java联手构建编程世界(linux.java)
- Java如何启动MySQL?(java启动mysql)
- 深入java内存查看与分析详解