利用 Memory Dump Diagnostic for Java (MDD4J) 分析内存管理问题(2)

启动和理解 MDD4J[size=1.0625]为了充分理解如何使用 MDD4J,您需要了解用于描述内存泄漏的几个术语的含义。图 1 通过名为 MyClass 的示例展示了这些术语,此示例具有一个 HashSet,包含字符串对象。
图 1. 内存泄漏术语

  • 泄漏根:包含导致泄漏容器的对象链的引用的对象。如果在所有者链中未发现任何类对象,则此术语表示可找到泄漏容器的内存转储中的根对象。
  • 泄漏容器:唯一拥有所有泄漏对象的对象。在本例中是 HashMap。
  • 泄漏单元:存在多个实例的数据结构内的对象。在本例中是 HashMap 内的 HashMap$Entry 对象。
  • 所有者链:从泄漏根对象开始到泄漏容器对象的对象链。
  • 内容:泄漏根下为堆消耗的大部分负责的实际数据。

[size=1.0625]另外还有一些未在图 1 中出现的信息,但与内存泄漏相关:

  • 区域大小:给定对象可接触的所有对象的总大小。在本例中,就是影响泄露根的区域大小的所有对象。
  • 区域大小落差:一个对象的区域大小和该对象的子对象的区域大小之间的差别。此差别与实例计数的差别是发现泄漏疑点的关键。

[size=1.0625]MDD4J 的启动与 IBM Support Assistant workbench 中安装的其他工具相同。图 2 显示了 workbench 中的 MDD4J 在启动并完成分析后的状态。在分析完成后,您看到的第一个视图就是 Analysis Summary。(如果希望将 MDD4J 从 workbench 导出到其他机器上,将有一个批处理文件或 shell 脚本可用于运行此工具)。
[size=1.0625]在下面的几节中,您将了解分析结果在 MDD4J 中的显示方式。所显示的信息针对主转储。
评估分析结果[size=1.0625]Analysis Summary 是您在分析完成后看到的第一个视图。它显示了分析结果的信息汇总,并提供了堆内容和堆中主要组成部分的快速概览。在这个窗格中,可以确定在堆大小中占最大比例的组件和类型。
图 2. IBM Support Assistant workbench 中的 MDD4J[size=1.0625]Analysis Summary 具有三个部分:

  • Basic Heap Information(如图 3 所示)显示关于堆和堆转储文件的信息:堆大小、对象数量、对象类型数量、堆转储文件名称和堆转储文件的获取日期。图 3. Basic Heap Information
  • High-level Summary of the Heap Contents(如图 4 所示)显示了两个图表,显示在堆大小中占比例最大的堆转储中的组件和类型。
    • Predefined Components 图显示了与 Java 和 WebSphere 应用程序中的常用组件相比,各组对象在堆大小中所占的相对比例。
    • Type Breakdown 图显示了最常用的 Java 类在堆大小中所占的相对比例。

    图 4. High-level Summary of the Heap Contents

[size=1.0625]在 Analysis Summary 视图中,还可访问单一文件的 HTML 报告(如图 2 所示),其中提供了分析结果的汇总。报告包含 MDD4J 中各种视图提供的所有信息,但未显示图形。可利用此报告与您的同事快速共享分析结果。
[size=1.0625]还可以下载一部分 MDD4J 用户界面(Data Structures[size=1.0625] 选项卡,本文稍后将加以介绍),将其作为 Yeti Report[size=1.0625] 独立报告(如图 2 所示),并保存所得到的 .zip 压缩文件。将压缩文件的内容解压到空目录中,在 Web 浏览器中打开 index.html 文件。关于 Yeti,请参见 认识大型堆。

利用 Memory Dump Diagnostic for Java (MDD4J) 分析内存管理问题的更多相关文章

  1. Java堆外内存管理

    Java堆外内存管理   1.JVM可以使用的内存分外2种:堆内存和堆外内存: 堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemo ...

  2. 高性能JAVA开发之内存管理

    这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题,调研了一些java内存管理的资料,现整理如下: 一.JVM中的对象生命周期 对象的生命周期一般分为7个阶段:创建阶段,应用阶段,不可视阶 ...

  3. JVM内存管理------JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...

  4. Java数组的内存管理

    Java数组的内存管理 Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java程序中的数组必须经初始化才能使用.所谓初始化,就是当数组对象的元 ...

  5. JVM内存管理之JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...

  6. Java常见问题分析(内存溢出、内存泄露、线程阻塞等)

    Java垃圾回收机制(GC) 1.1 GC机制作用 1.2 堆内存3代分布(年轻代.老年代.持久代) 1.3 GC分类 1.4 GC过程 Java应用内存问题分析 2.1 Java内存划分 2.2 J ...

  7. 深入java虚拟机学习 -- 内存管理机制

    前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...

  8. 深入理解JAVA虚拟机 自动内存管理机制

    运行时数据区域 其中右侧三个一起的部分是每个线程一份,左侧两个是所有线程共享的. 程序计数器(Program Counter Register) 英文名称叫Program Counter Regist ...

  9. [深入理解Java虚拟机]<自动内存管理>

    Overview 走近Java:介绍Java发展史 第二部分:自动内存管理机制 程序员把内存控制的权利交给了Java虚拟机,从而可以在编码时享受自动内存管理.但另一方面一旦出现内存泄漏和溢出等问题,就 ...

随机推荐

  1. C++(三十九) — 主函数中增加调试信息

        程序调试技术: (1)阅读程序,静态代码复查: (2)“cout大法” (3)使用开发工具,断点 int main() { TShape s(lu, lu); cout << __ ...

  2. #define的一个小技巧

    /* atof example: sine calculator */ #include <stdio.h> /* printf, fgets */ #include <stdlib ...

  3. Python凯撒密码和括号匹配

    1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...

  4. python API _ 1 (EasyDict)

    作用:参数调用文件一:from easydict import EasyDict as edictimport numpy as np config = edict() config.IMG_HEIG ...

  5. Ubuntu16.04 install hadoop-2.8.1.tar.gz Cluster Setup

    环境说明: ip地址 用户名称 机器名称 机器角色 192.168.3.150 donny  donny-Lenovo-B40-80 Master + Salve 192.168.3.167 cqb ...

  6. webuploader+asp.net如何实现分片+断点续传

    文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...

  7. windows api多线程

    windows api多线程  原文地址:https://www.cnblogs.com/flowingwind/p/8452693.html 线程是程序中一个单一的顺序控制流程.在单个程序中同时运行 ...

  8. linux 环境变量的设置

    方法一: 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”. 要让刚才的 ...

  9. COGS 1151 活动安排

    - 有 N 场活动,每场活动在特定的时间需要占用场地. - 如果有两场活动需要同一时间占用场地,则不能同时举行 - 问最多能举行多少场活动? 将所有活动按照结束时间从早到晚排序后贪心即可 具体思路看代 ...

  10. Maven项目启动失败:class path resource [spring/] cannot be resolved to URL because it does not exist

    目录 Maven项目启动失败:class path resource [spring/] cannot be resolved to URL because it does not exist 解决方 ...