理解Heap Profling名词-Shallow和Retained Sizes

简介:

所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size.
这是两个在平时不太常见的名词,本文会对这两个名词做一个详细的解释。

Shallow Size
对象自身占用的内存大小,不包括它引用的对象。
针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
针对数组类型的对象,它的大小是数组元素对象的大小总和。

Retained Size
Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

看图理解Retained Size

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上图中,GC Roots直接引用了A和B两个对象。

A对象的Retained Size=A对象的Shallow Size
B对象的Retained Size=B对象的Shallow Size + C对象的Shallow Size

这里不包括D对象,因为D对象被GC Roots直接引用。
如果GC Roots不引用D对象呢?

此时,
B对象的Retained Size=B对象的Shallow Size + C对象的Shallow Size + D对象的Shallow Size

相关文章
|
机器学习/深度学习 人工智能 自然语言处理
LLM 大模型学习必知必会系列(一):大模型基础知识篇
LLM 大模型学习必知必会系列(一):大模型基础知识篇
LLM 大模型学习必知必会系列(一):大模型基础知识篇
|
11月前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
757 0
Java面试题之cpu占用率100%,进行定位和解决
|
11月前
|
缓存 搜索推荐 数据挖掘
TPS和QPS是什么?都是什么区别?
TPS和QPS是什么?都是什么区别?
8674 4
|
XML 数据可视化 数据格式
camunda-modeler(5.9.0)介绍及下载
camunda-modeler(5.9.0)介绍及下载
1180 1
|
人工智能 数据可视化 API
Dify-生成式 AI 应用创新引擎,本地搭建以及使用
Dify-生成式 AI 应用创新引擎,本地搭建以及使用
4730 1
|
JavaScript Java Maven
理解固化的Maven依赖:spring-boot-starter-parent 与 spring-boot-dependencies
理解固化的Maven依赖:spring-boot-starter-parent 与 spring-boot-dependencies
6025 1
|
前端开发 JavaScript API
开箱即用的axios封装:Vue3+TS(建议收藏)
Axios多用于处理前端项目的Ajax请求,这里要注意区分Axios和Ajax:Ajax是一种技术统称,Axios是第三方库。在使用的时候,我们可以直接使用Axios来发起请求,也可以封装后采用统一的接口发送请求。在前端项目中,应该大多数人都会选择封装一下Axios,不仅可以节省代码,看起来更简洁;而且可以统一管理请求和响应。本文就以Vue3+Typescript,封装一个”开箱即用“的Axios。
11969 6
开箱即用的axios封装:Vue3+TS(建议收藏)
|
存储 分布式计算 网络协议
【Elasticsearch】elasticsearch.yml配置文件解读,ES配置详解
【Elasticsearch】elasticsearch.yml配置文件解读,ES配置详解
1612 0
|
Kubernetes Cloud Native Java
探索Quarkus:Java的新一代高性能轻量级框架
探索Quarkus:Java的新一代高性能轻量级框架
4963 3
|
JSON Java fastjson
JMH - Java 代码性能测试的终极利器、必须掌握
JMH - Java 代码性能测试的终极利器、必须掌握
4306 1