李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
!Destiny
惟坚韧者始能遂其志
  1. 首页
  2. 后端
  3. 正文

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

2026年8月3日 约 617 字3 分钟 249 1 2

这个算是比较常用的一个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

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

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

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA JVM 内存 对象
最后更新:2026年8月3日

岁月同一天 9 月 18 日

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

  • 网络
    1 年前 2025年9月18日
    NLB和ALB结合的场景和优缺点

    要理解 NLB(网络层负载均衡,L4)与 ALB(应用层负载均衡,L7)结合 的场景和优缺点,首先需要明确两者的核心定位…

  • 5 年前 2021年9月18日
    1931→2021!

    1931—2021 历史再次刻印下新的时间坐标 90年前那刻骨铭心的屈辱 却一刻也不曾忘、不敢忘、不能忘! 90年前的今…

  • 7 年前 2019年9月18日
    关于Elasticsearch文档的描述以及如何操作文档的详细总结

    文档 什么是文档 在大多数应用中,多数实体或对象可以被序列化为包含键值对的 JSON 对象。 一个 键 可以是一个字段或…

相关文章
  • JAVA技术点总结一2019年11月18日
  • 配置Jackson使用字段而不是getter/setter来序列化和反序列化2026年3月19日
  • ZGC介绍2025年2月15日
  • 双 Token 机制2025年5月19日
  • Spring Boot发展史(Spring Boot介绍)2019年10月12日

李锋镝

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

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

文章评论

  • blank
    林羽凡Lv 3友

    哎呀我天,我点了右侧的奢香夫人,突然感觉有一种进抖音的感觉。

    WindowsWindowsChrome 150.0.0.0Chrome 150.0.0.0中国中国-甘肃-兰州
    2026年8月5日
    00 回复
    • blank
      李锋镝博主

      @林羽凡 hahaha,好听的歌可以推荐一下,不定期更新歌单

      macOSmacOSChrome 151.0.0.0Chrome 151.0.0.0中国中国-北京
      2026年8月5日
      00 回复
  • ... the truly free individual is free only to the extent of his own self-mastery. While those who will not govern themselves are condemned to find masters to govern over them.

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    WordPress下一代默认主题Ipsum预览 C++之父重磅发声:AI编程正在毁掉一代程序员 支撑全网40%网站的WordPress正在重新拥抱PHP生态 Kratos-plus v1.1.24版本更新说明 关于主题加载速度优化的一点儿小演进 市场主流AI编程大模型横向深度分析(2026-09-11)
    给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比关于使用AI的一些思考关于主题加载速度优化的一点儿小演进Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?
    8条经验轻松上手IDEA插件开发 数据库事务的隔离级别 使用Spring MVC的websocket配置时 Tomcat启动报错 技术人员转团队管理该怎么做 Java之五种遍历Map集合的方式 双 Token 机制
    最近评论
    blank
    李锋镝 发布于 3 小时前(09月18日) 哈哈哈,没事,顺序不影响阅读
    blank
    李锋镝 发布于 3 小时前(09月18日) 是的,至少降低了编程的门槛
    blank
    老张博客 发布于 15 小时前(09月17日) AI于我们这样不会编程的人还是得利的!至少可以搞一些小的项目来满足自己的需求!
    blank
    fairy 发布于 20 小时前(09月17日) 帮助可太大了……甚至已经依赖了。然后我才发现我拼错了nginx……
    blank
    李锋镝 发布于 1 天前(09月17日) 而且插件多了网站速度还会变慢
    标签聚合
    IDEA 数据库 SQL 多线程 ElasticSearch MySQL MQ Spring K8s JAVA Claude WordPress 架构 AI JVM Redis 分布式 AI编程 SpringBoot 日常
    友情链接
    • 韩情脉脉
    • 瓦匠个人小站
    • 临窗旋墨
    • 林羽凡
    • 蜗牛工作室
    • Honesty
    • 懋和道人
    • 皮皮社
    • 若梦博客
    • 韩小韩博客
    • lijie blog
    • Mr.Sun的博客
    • 哥斯拉
    • 九仞之行
    • sssr7844的博客
    • 彬红茶日记
    • 搬砖日记
    • 老张博客
    • Serendipity
    • 知向前端

    COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

    lifengdi.com

    Domain age badge for lifengdi.com

    Theme Kratos-plus By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号