深入拆解Java虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
立即订阅
28017 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么我们要学习Java虚拟机?
免费
模块一:Java虚拟机基本原理 (12讲)
01 | Java代码是怎么运行的?
02 | Java的基本类型
03 | Java虚拟机是如何加载Java类的?
04 | JVM是如何执行方法调用的?(上)
05 | JVM是如何执行方法调用的?(下)
06 | JVM是如何处理异常的?
07 | JVM是如何实现反射的?
08 | JVM是怎么实现invokedynamic的?(上)
09 | JVM是怎么实现invokedynamic的?(下)
10 | Java对象的内存布局
11 | 垃圾回收(上)
12 | 垃圾回收(下)
模块二:高效编译 (12讲)
【工具篇】 常用工具介绍
13 | Java内存模型
14 | Java虚拟机是怎么实现synchronized的?
15 | Java语法糖与Java编译器
16 | 即时编译(上)
17 | 即时编译(下)
18 | 即时编译器的中间表达形式
19 | Java字节码(基础篇)
20 | 方法内联(上)
21 | 方法内联(下)
22 | HotSpot虚拟机的intrinsic
23 | 逃逸分析
模块三:代码优化 (10讲)
24 | 字段访问相关优化
25 | 循环优化
26 | 向量化
27 | 注解处理器
28 | 基准测试框架JMH(上)
29 | 基准测试框架JMH(下)
30 | Java虚拟机的监控及诊断工具(命令行篇)
31 | Java虚拟机的监控及诊断工具(GUI篇)
32 | JNI的运行机制
33 | Java Agent与字节码注入
模块四:黑科技 (3讲)
34 | Graal:用Java编译Java
35 | Truffle:语言实现框架
36 | SubstrateVM:AOT编译框架
尾声 (1讲)
尾声 | 道阻且长,努力加餐
深入拆解Java虚拟机
登录|注册

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

郑雨迪 2018-10-01
今天我们来继续了解 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入拆解Java虚拟机》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(10)

  • Maxwell
    能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?
    2018-12-21
    7
  • fuyu
    要是能举几个例子结合工具排查就更好了。
    2018-10-01
    4
  • 阿武
    国庆也推送,大写的服。👍👍
    2018-10-01
    4
  • qpm
    MAT是一个非常有用的工具,已经用它成功排查过内存泄露的问题。
    2018-10-02
    3
  • neohope
    之前在项目上遇到了这种情况:我们有一个服务专门处理XML,有明显的内存泄漏,运行一天后内存会有几十G,导出的内存快照也是几十G,但压缩后只有几百M。用MAT查看内存快照,发现都是空的。现在回想起来,是不是我们用的XML类库,用了直接内存?那直接内存的话,用什么方法可以查看内存泄漏的情况呢?
    2019-09-07
    2
  • godtrue
    JVM GUI监控和检测工具
    1:MAT
    2:JMC
    这两个没怎么用过,回头下载、安装、使用下,国庆回家了,雨迪老师还在匀速的前进,是不是课程是提前编写好,录制好,然后定时放出?无论怎么非常感谢,跟着老师确实学习了不少东西,最后两天补上拉下的课程。

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

    2018-10-06
    2
  • 随心而至
    下了VisualVM,结合官方文档,发现真的好用。
    2019-11-01
  • Roway
    老师,不说一下IBM的两个分析工具吗?一个内存的一个CPU的
    2019-06-26
  • Roway
    能否分享下实际工作中发生内存泄露,使用MAT分析和定位的案例呢?
    2019-06-26
  • 遇见未来
    老师您好,openjdk可以用JFR嘛,配置了好久没成功,如果不能有没有类似的工具推荐,谢谢😁

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

    2018-10-26
收起评论
10
返回
顶部