阅读 126

内存优化中的Shallow Size和Retained Size是啥?

想要说清楚Retained size就必须要提到shallow Size。

Shallow Size

shallow size: 是指实例自身占用的内存, 可以理解为保存该'数据结构'需要多少内存, 注意不包括它引用的其他实例

计算公式:

Shallow Size = [类定义] + 父类fields所占空间 + 自身fields所占空间 + [alignment]复制代码
  1. 类定义是指, 声明一个类本身所需的空间, 固定为8byte, 也就是说, 一个不包含任何fields的类的'空类', 也需要占8byte; 另外类定义空间不会重复计算, 就是说, 即使类继承其他类, 也只算8byte

  2. 父类fields所占空间, 对于继承了其他类的类来说, 父类声明的fields显然需要占用一定的空间

  3. 自身fields所占空间, 所有fields所占空间之和; fields分基本类型和引用, 基本类型所占空间和系统有关, 例如在32位系统中int=4byte, 64位系统中int=8byte; 引用固定占4byte, 例如String name;这个变量声明占4byte.

  4. alignment是指位数对齐, 会让总空间为8的倍数, 例如某个A类, 以上3项计算出来为15byte, 那么为了对齐, 让它是8的倍数, 会取最接近的值, 所以它的Shallow Size是16byte;

Retained Size

实例A的Retained Size是指, 当实例A被回收时, 可以同时被回收的实例的Shallow Size之和

所以进行内存分析时, 我们应该重点关注Retained Size较大的实例; 或者可以通过Retained Size判断出某A实例内部使用的实例是否被其他实例引用.

Shallow Size 与 Retained Size关系

先借用一张图,这张图更能清楚的表示他们之间的计算关系。

image.png

B的shallow size = B;

B的retained size = B shallow size + C retained size + D retained size;

单位

Shallow Size 与 Retained Size的单位是Byte

参考:
Shallow Size和Retained Size详解

java retained size_java中使用MAT是shallow size 单位是什么


作者:心在梦在
链接:https://juejin.cn/post/7020706981652463629

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐