“Eclipse Memory Analyzer(MAT)分析JVM堆转储文件”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的3个中间版本)
第1行: 第1行:
独立包下载地址:
+
==== 独立包下载地址 ====
 
 
 
https://eclipse.dev/mat/download/
 
https://eclipse.dev/mat/download/
  
第6行: 第5行:
  
  
1.14 是支持 JDK8的:
 
  
https://www.eclipse.org/downloads/download.php?file=/mat/1.14.0/rcp/MemoryAnalyzer-1.14.0.20230315-win32.win32.x86_64.zip
+
 
 +
==== 历史版本目录 ====
 +
https://eclipse.dev/mat/download/previous/
 +
 
 +
 
 +
 
 +
==== 实测 1.8 版本支持 JDK8 ====
 +
https://archive.eclipse.org/mat/1.8/rcp/MemoryAnalyzer-1.8.0.20180604-win32.win32.x86_64.zip
 +
 
 +
 
 +
=== 一些概念 ===
 +
 
 +
==== shallow heap,浅堆 ====
 +
指的是一个对象本身所占用的内存大小,不包含该对象引用的其他对象所占用的内存。每个对象在内存中都有其自身的开销,这包括对象头信息(用于存储对象的元数据,如哈希码、锁状态等)、实例变量所占用的空间等。
 +
 
 +
 
 +
示例说明:
 +
 
 +
假设我们有以下简单的 Java 类:<syntaxhighlight lang="java">
 +
class Address {
 +
    String street;
 +
    String city;
 +
    int zipCode;
 +
}
 +
 
 +
class Person {
 +
    String name;
 +
    int age;
 +
    Address address;
 +
}
 +
</syntaxhighlight>当创建一个 <code>Person</code> 对象时:<syntaxhighlight lang="java">
 +
Person person = new Person();
 +
person.name = "John";
 +
person.age = 30;
 +
person.address = new Address();
 +
person.address.street = "123 Main St";
 +
person.address.city = "Anytown";
 +
person.address.zipCode = 12345;
 +
</syntaxhighlight>
 +
 
 +
* <code>Person</code> 对象的浅堆大小:只包含 <code>Person</code> 对象自身的实例变量(<code>name</code>、<code>age</code>、<code>address</code> 引用)以及对象头信息所占用的内存,不包含 <code>name</code> 引用的 <code>String</code> 对象、<code>address</code> 引用的 <code>Address</code> 对象所占用的内存。
 +
* <code>Address</code> 对象的浅堆大小:只包含 <code>Address</code> 对象自身的实例变量(<code>street</code>、<code>city</code>、<code>zipCode</code>)以及对象头信息所占用的内存,不包含 <code>street</code> 和 <code>city</code> 引用的 <code>String</code> 对象所占用的内存。
 +
 
 +
 
 +
==== retained heap,保留堆 ====
 +
指的是当一个对象被垃圾回收器回收时,能够被释放的内存总量。这一内存总量不仅包含该对象自身的浅堆(Shallow Heap)大小,还涵盖了该对象直接或间接引用的所有对象的浅堆大小之和。换句话说,保留堆反映了该对象在堆中实际占用的内存空间,也就是该对象及其依赖对象所占据的内存总和。

2025年3月9日 (日) 02:19的最新版本

独立包下载地址

https://eclipse.dev/mat/download/

最新版的会要求比较高版本的JDK



历史版本目录

https://eclipse.dev/mat/download/previous/


实测 1.8 版本支持 JDK8

https://archive.eclipse.org/mat/1.8/rcp/MemoryAnalyzer-1.8.0.20180604-win32.win32.x86_64.zip


一些概念

shallow heap,浅堆

指的是一个对象本身所占用的内存大小,不包含该对象引用的其他对象所占用的内存。每个对象在内存中都有其自身的开销,这包括对象头信息(用于存储对象的元数据,如哈希码、锁状态等)、实例变量所占用的空间等。


示例说明:

假设我们有以下简单的 Java 类:

class Address {
    String street;
    String city;
    int zipCode;
}

class Person {
    String name;
    int age;
    Address address;
}

当创建一个 Person 对象时:

Person person = new Person();
person.name = "John";
person.age = 30;
person.address = new Address();
person.address.street = "123 Main St";
person.address.city = "Anytown";
person.address.zipCode = 12345;
  • Person 对象的浅堆大小:只包含 Person 对象自身的实例变量(nameageaddress 引用)以及对象头信息所占用的内存,不包含 name 引用的 String 对象、address 引用的 Address 对象所占用的内存。
  • Address 对象的浅堆大小:只包含 Address 对象自身的实例变量(streetcityzipCode)以及对象头信息所占用的内存,不包含 streetcity 引用的 String 对象所占用的内存。


retained heap,保留堆

指的是当一个对象被垃圾回收器回收时,能够被释放的内存总量。这一内存总量不仅包含该对象自身的浅堆(Shallow Heap)大小,还涵盖了该对象直接或间接引用的所有对象的浅堆大小之和。换句话说,保留堆反映了该对象在堆中实际占用的内存空间,也就是该对象及其依赖对象所占据的内存总和。