李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 走心评论
  • 系列文章
  • Now
  • 每日心情
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 后端
  3. 正文

如何通过命令查看Java应用内存中对象数量

2026年8月3日 约 617 字3 分钟 1点热度 0人点赞 0条评论

这个算是比较常用的一个Java工具了,记录一下。

一、最常用:jmap -histo(JDK 自带)

# 查看所有对象的实例数和内存占用(按大小排序)
jmap -histo <pid>

# 只看存活对象(先触发一次 Full GC,再统计)
jmap -histo:live <pid>

输出示例

 num     #instances         #bytes  class name
----------------------------------------------
   1:       1234567       98765432  [C  (char数组,字符串底层)
   2:        567890       45678901  java.lang.String
   3:        345678       34567890  java.util.HashMap$Node
   4:        234567       23456789  com.xxx.User
列 含义
#instances 对象实例数量
#bytes 占用内存字节数
class name 类名

常用技巧

# 只看某个类的对象数量(用 grep 过滤)
jmap -histo <pid> | grep "SpringValue"

# 输出到文件,方便后续分析
jmap -histo <pid> > obj_histogram.txt

# 看 Top 20 最大的对象
jmap -histo <pid> | head -25

二、更强大:jcmd(JDK 自带,推荐)

jcmd 是 JDK 8+ 推荐的诊断工具,功能比 jmap 更全:

# 列出所有 Java 进程
jcmd -l

# 查看对象直方图(等价于 jmap -histo)
jcmd <pid> GC.class_histogram

# 只看存活对象
jcmd <pid> GC.class_histogram -all=false

三、实时监控:Arthas

阿里开源的 Java 诊断工具,功能最强大,不用重启应用:

# 安装启动
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

# 选择进程后,查看对象统计
vmtool --action getInstances --className com.xxx.User --limit 10

# 查看某个类的实例数量
vmtool --action getInstances --className com.xxx.User | wc -l

# 查看对象详情
vmtool --action getInstances --className com.xxx.User --limit 1 -x 2

四、导出堆快照后分析

如果需要深度分析,先导出堆转储文件,再用 MAT / JVisualVM 分析:

# 导出堆快照(hprof 格式)
jmap -dump:format=b,file=heap.hprof <pid>

# 或用 jcmd
jcmd <pid> GC.heap_dump heap.hprof

然后用 MAT(Memory Analyzer Tool) 打开,可以:

  • 查看对象数量、占比、内存泄漏分析
  • 用 OQL(对象查询语言)写复杂查询
  • 查看对象引用链

五、快速对比:哪个命令适合你

工具 自带 实时 功能 推荐场景
jmap -histo ✅ JDK自带 快照 基础统计 快速排查、线上应急
jcmd ✅ JDK自带 快照 比jmap全 JDK8+ 首选
Arthas ❌ 需安装 实时 非常强大 深度诊断、日常开发
MAT ❌ 需安装 离线 最强分析 内存泄漏根因定位

快速上手示例

# 1. 先找到 Java 进程 ID
jps -l

# 2. 查看对象数量 Top 10
jmap -histo 12345 | head -15

# 3. 查特定类的实例数
jmap -histo 12345 | grep "SpringValue"
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/hou-duan/4868

推荐阅读

  • try...catch性能深度剖析:从JVM原理到实战优化,打破技术迷思
  • 记一次Apollo配置中心+Spring配置自动刷新导致的内存泄露问题
  • jasypt-spring-boot 使用说明
  • 配置Jackson使用字段而不是getter/setter来序列化和反序列化
  • JDK25模块级导入深度解析:Java导入机制的革命性进化
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA JVM 内存 对象
最后更新:2026年8月3日

岁月同一天 8 月 3 日

回望过去的今天,你在写什么

  • 6 年前 2020年8月3日
    如何查看JVM参数

    背景 如何查看一个正在运行的Java程序中,它的某个JVM参数是否开启,具体值是多少? 正题 jps 和 jinfo j…

相关文章
  • 何时重构?2019年6月26日
  • SpringBoot 实现 RSA+AES 自动接口解密2025年5月26日
  • K8S + docker部署war包项目2020年5月11日
  • ConcurrentHashMap常用方法源码解析(jdk1.8)2019年10月10日
  • SpringBoot常用注解2025年5月28日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

位卑未敢忘忧国,事定犹须待阖棺。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
如何通过命令查看Java应用内存中对象数量 关于服务的探活端口和业务端口不一致有什么问题 记一次Apollo配置中心+Spring配置自动刷新导致的内存泄露问题 给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能 增加了两套复古皮肤-牛皮纸、千禧网页 Claude Design介绍与使用
AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了
Linux临时启用swap交换空间 妹妹的画【2019.07.25】 分库分表正在被淘汰?NewSQL与分库分表的深度博弈与选型指南 【收藏】Java问题排查相关工具工具箱 彻底搞懂mysql日志系统binlog,redolog,undolog MySQL语法总结
最近评论
李锋镝 发布于 2 天前(08月01日) 删了,哈哈哈,已经把这个机场关键字加黑名单了
Hary 发布于 2 天前(08月01日) 这机场又出来了,我也收到这个垃圾评论了,大哥赶紧删除它
李锋镝 发布于 3 天前(07月31日) :44: 踩坑踩多了
博客印象 发布于 3 天前(07月31日) 从定位到根治完整闭环,干货满满的后端排障实录
李锋镝 发布于 5 天前(07月29日) 每个站长追求不一样,有的喜欢简洁,有的喜欢二次元,有的喜欢复古…喜欢就好
标签聚合
Redis 多线程 分布式 SpringBoot Spring 日常 docker MySQL K8s AI AI编程 SQL JAVA WordPress ElasticSearch 数据库 架构 JVM IDEA 设计模式
友情链接
  • 林羽凡
  • 知向前端
  • Blogs·CN
  • 临窗旋墨
  • 韩情脉脉
  • 老张博客
  • 彬红茶日记
  • 旧时繁华
  • 瓦匠个人小站
  • 搬砖日记
  • 韩小韩博客
  • 皮皮社
  • 风渡言
  • 拾趣博客导航
  • 懋和道人
  • Mr.Sun的博客
  • 志文工作室
  • Honesty
  • 哥斯拉

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

域名年龄

Theme Kratos+ By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号