Shallow size就是对象本身占用内存的大小,不包含其引用的对象。常规对象(非数组)的Shallow size有其成员变量的数量和类型决定。数组的shallow size有数组元素的类型(对象类型、基本类型)和数组长度决定。Shallow size of a set of objects represents the sum of shallow sizes of all objects in the set.在32位系统上,对象头占用8字节,int占用4字节,不管成员变量(对象或数组)是否引用了其他对象(实例)或者赋值为null它始终占用4字节。故此,对于String对象实例来说,它有三个int成员(3*4=12字节)、一个char[]成员(1*4=4字节)以及一个对象头(8字节),总共3*4 +1*4+8=24字节。根据这一原则,对String a=”rosen jiang”来说,实例a的shallow size也是24字节。(注意:上述String是jdk1.5的,代码如下:)

[java] view plaincopy
  1. public final class String
  2. implements java.io.Serializable, Comparable<String>, CharSequence
  3. {
  4. /** The value is used for character storage. */
  5. private final char value[];
  6. /** The offset is the first index of the storage that is used. */
  7. private final int offset;
  8. /** The count is the number of characters in the String. */
  9. private final int count;
  10. /** Cache the hash code for the string */
  11. private int hash; // Default to 0

jdk1.7的String实现已经变了。)

Retained size是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和。为了更好的理解retained size,不妨看个例子。

把内存中的对象看成下图中的节点,并且对象和对象之间互相引用。这里有一个特殊的节点GC Roots,这就是reference chain的起点。

从obj1入手,上图中蓝色节点代表仅仅只有通过obj1才能直接或间接访问的对象。因为可以通过GC Roots访问,所以左图的obj3不是蓝色节点;而在右图却是蓝色,因为它已经被包含在retained集合内。

所以对于左图,obj1的retained size是obj1、obj2、obj4的shallow size总和;右图的retained size是obj1、obj2、obj3、obj4的shallow size总和。

对于obj2,它的retained size是:在左图中,是obj2和obj4的shallow size的和;在右图中,是obj2、obj3和obj4的shallow size的和。

总之,retained size是一个整体度量,有助于理解内存结构和对象图中的依赖关系并找到根节点。

英文原文:Shallow and retained sizes

Shallow size和Retained size相关推荐

  1. GC之二--GC是如何回收时的判断依据、shallow(浅) size、retained(保留) size、Deep(深)size...

    回到问题"为何会内存溢出?". 要回答这个问题又要引出另外一个话题,既什么样的对象GC才会回收? 一.对象存活方式判断方法 在上一篇文章<GC之一--GC 的算法分析.垃圾收 ...

  2. Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?

    原文在这里: Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思? MAT是一款非常强大的JVM内存映像分析工具,对分析内存相关的问题非常有用,MAT报告中对 ...

  3. C++/OpenCV:Error: Assertion failed ((unsigned)i0 < (unsigned)(size.p[0] * size.p[1]))

    Error: Assertion failed ((unsigned)i0 < (unsigned)(size.p[0] * size.p[1])) in cv::Mat::at, file d ...

  4. Mtk Camera中Hal1/Hal3的Picture size和Preview size配置

    在进行camera系统开发时,总会碰到产品需要,需要一个添加一个多少多少M的照片大小,比如产品经理说我们也要添加一个1:1,添加一个18:9的照片大小.这个情况很常见了,所以这篇文章总结一下平常工作中 ...

  5. int(size)中的size到底神马意思(mysql)

    (译者注:这个问题困扰了我连续几天,相关资料很少,没有明确的给出答案,也可能是笔者理解力太差,总算找到篇英文帖专门研究这个问题,学习的同时翻译了过来,与大家共同探讨) 2007,8,24 星期五 21 ...

  6. RuntimeError:Given input size:(256x1x1). Calculated output size: (256x0x0).Output size is too small

    RuntimeError: Given input size: (256x1x1). Calculated output size: (256x0x0). Output size is too sma ...

  7. 内核启动错误:vmap allocation for size 314576896 failed: use vmalloc=size to increase size

    逻辑部分加了一个PCIE-RC组件,启动时发现如下错误: # insmod recorder_all_dongtai.ko [ 188.999787] recorder_all: loading ou ...

  8. 内核启动错误:use vmalloc=size to increase size.

    逻辑部分加了一个PCIE-RC组件,启动时发现如下错误: vmap allocation for size 268439552 failed: use vmalloc=<size> to ...

  9. MATLAB里面size什么意思,matlab中的size(A,2)==size(B,1)是什么意思

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:matlab中的size(A,2)==size(B,1)是什么意思?回答:size返回矩阵的行数或列数.size(A,2)返回的是矩 ...

最新文章

  1. C 语言 和 C++语言的对比学习   二 数据类型
  2. @RequestMapping执行过程
  3. ES JVM使用如果超过75%就会GC较多,导致ES索引性能下降
  4. [转]iOS5 ARC学习笔记:strong、weak等详解
  5. Keras + Windows +Anaconda2-4.2.0 深度学习框架快速搭建
  6. EntityFramwork(1) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542
  7. VS2005为什么会自动关闭?使用Visual Assist X的要注意了
  8. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二)让物体动起来②
  9. hbase 导入到es_HBase数据同步到ElasticSearch的方案
  10. 芯片验证工作初有感--没落骑士
  11. dev万能头文件_Dev c++ 支持bits/stdc++.h万能头文件吗
  12. win10任务栏怎么还原到下面_如何让你的Win10桌面变得更好看?
  13. s7 edge android 8,盖乐世S7/S7edge 正式开启Android 8.0系统内测活动
  14. 西威变频器使用说明书_西威变频器说明书西威变频器说明书图文.doc
  15. 应用时间序列分析(王燕)学习笔记1
  16. 实验2《词法分析程序设计与实现》(C语言版)
  17. c语言 取结构体地址,结构体赋值,对用不用取地址符有些困惑?
  18. 携程Java后台开发面经
  19. 高大上的数据可视化图表,只需6步就能完成
  20. secureCRT命令行字符重叠只显示一半

热门文章

  1. 1166 Summit (25 分) PAT
  2. 乐优13天UnmappedTerms cannot be cast to org.elasticsearch.search.aggregations.bucket.terms.StringTerms
  3. [M30 Linux 随堂笔记] 标题索引
  4. Journalnbsp;ofnbsp;Machinenbsp;Learningnbsp;Rese…
  5. 基于MBD的BMS电池管理系统应用层软件,策略说明
  6. 倍福--控制电缸的配置
  7. Linux的压缩及归档
  8. 【电子元器件基础】电容的作用
  9. 感情中最好的心态……
  10. FLIR数据集详细解释