其他
Android 内存优化的小知识
本文作者
作者:苍耳叔叔
链接:
https://juejin.cn/post/7259957160306131004
本文由作者授权发布。
Shallow Size: Total amount of Java memory used by this object type (in bytes); Size of this instance in Java memory. Retained Size: Total size of memory being retained due to all instances of this class (in bytes); Size of memory that this instance dominates (as per the dominator tree).
Shallow Size = 类定义 + 属性占用空间 + 位数对齐
类定义:声明一个类本身所需的空间,固定为 8 个字节。类定义空间不会重复计算,即使类继承了其他类,也只算 8 个字节。定义了一个没有任何属性的类,查看其 Shallow Size 大小为 8 个字节。 属性占用空间:所有属性所占空间之和,包括自身的和父类的所有属性。属性分为基本类型和引用,如 int 类型占 4 个字节,long 类型占 8 个字节,引用固定 (String, Reference) 占 4 个字节。 位数对齐:使总空间为 8 的倍数。比如某个类以上两项共 21 字节,那么为了对齐,会取最接近 8 的倍数的值,即它的 Shallow Size 是 24 个字节。与系统有关,有的不会对齐。
// Shallow Size = 28 = 8 + 4 + 8 + 4 + 4
// Retained Size = 36 = 28 + 8
data class Resource(
val int: Int,
val long: Long,
val string: String,
val reference: Res
)
// Shallow Size = 8
class Res()
移除 D 实例:D 没有引用任何实例,因此只会释放自身的 Shallow Size,即 R(D) = S(D) = X。 移除 C 实例:移除 C 后,由于它引用了 D,且 D 没有被其他实例引用,因此 D 也会被一起回收,即 R(C) = S(C) + S(D) = 2X。 移除 B 实例:移除 B 后,由于 B 和 A 实例都引用了 C 实例,所以移除 B 并不会让 C 实例被 GC 回收。即 R(B) = S(B) = X。 移除 A 实例:B、C、D 实例被一起回收,即 R(A) = S(A) + S(B) + S(C) + S(D) = 4X。
最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!
推荐阅读:
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!