深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
86502 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

31 | Java虚拟机的监控及诊断工具(GUI篇)

今天我们来继续了解 Java 虚拟机的监控及诊断工具。

eclipse MAT

在上一篇中,我介绍了jmap工具,它支持导出 Java 虚拟机堆的二进制快照。eclipse 的MAT 工具便是其中一个能够解析这类二进制快照的工具。
MAT 本身也能够获取堆的二进制快照。该功能将借助jps列出当前正在运行的 Java 进程,以供选择并获取快照。由于jps会将自己列入其中,因此你会在列表中发现一个已经结束运行的jps进程。
MAT 获取二进制快照的方式有三种,一是使用 Attach API,二是新建一个 Java 虚拟机来运行 Attach API,三是使用jmap工具。
这三种本质上都是在使用 Attach API。不过,在目标进程启用了DisableAttachMechanism参数时,前两者将不在选取列表中显示,后者将在运行时报错。
当加载完堆快照之后,MAT 的主界面将展示一张饼状图,其中列举占据的 Retained heap 最多的几个对象。
这里讲一下 MAT 计算对象占据内存的两种方式。第一种是 Shallow heap,指的是对象自身所占据的内存。第二种是 Retained heap,指的是当对象不再被引用时,垃圾回收器所能回收的总内存,包括对象自身所占据的内存,以及仅能够通过该对象引用到的其他对象所占据的内存。上面的饼状图便是基于 Retained heap 的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • JVM GUI监控和检测工具 1:MAT 2:JMC 这两个没怎么用过,回头下载、安装、使用下,国庆回家了,雨迪老师还在匀速的前进,是不是课程是提前编写好,录制好,然后定时放出?无论怎么非常感谢,跟着老师确实学习了不少东西,最后两天补上拉下的课程。

    作者回复: 提前一周写好的。极客的小编辛苦些,需要加班较稿。

    7
  • 遇见未来
    老师您好,openjdk可以用JFR嘛,配置了好久没成功,如果不能有没有类似的工具推荐,谢谢😁

    作者回复: Java 11开始才进OpenJDK的

  • Maxwell
    能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?
    14
  • fuyu
    要是能举几个例子结合工具排查就更好了。
    6
  • 阿武
    国庆也推送,大写的服。👍👍
    6
  • 小文同学
    MAT是一个非常有用的工具,已经用它成功排查过内存泄露的问题。
    5
  • neohope
    之前在项目上遇到了这种情况:我们有一个服务专门处理XML,有明显的内存泄漏,运行一天后内存会有几十G,导出的内存快照也是几十G,但压缩后只有几百M。用MAT查看内存快照,发现都是空的。现在回想起来,是不是我们用的XML类库,用了直接内存?那直接内存的话,用什么方法可以查看内存泄漏的情况呢?
    4
  • 啸疯
    Idea中有jprofile插件可以用
    2
  • Roway
    能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?
    1
    1
  • Tomy
    老师能否出一版jvm的书,市面上这方面的书太少了且不够系统和全面
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部