android计算内存大小,如何获取Android中对象的内存大小或性能基准?

长话短说,我想针对该类测试android.os.Bundle类的克隆实现,以查看哪种更好。我已经知道我的版本很可能会更糟糕,但我想知道 有多少

糟糕。是否有适用于Android的基准测试工具,可以用来查看哪个对象的内存更大和/或需要更多的处理时间来存储/检索值?

TL; DR:

我查看了android.os.Bundle类的源代码,但我不喜欢它存储和返回对象的方式。它只是将它们存储在中HashMap

Object>,然后使用ClassLoader

强制转换为所请求对象的类(如getString()或getInt())。我觉得这或任何此类的类强制转换都违反了类型安全性,并在编程级别引入了歧义,这是静态类型旨在防止的,不是吗?

我想创建一个不违反类型安全且不引入歧义的类似数据容器类。逻辑上简单但显然效率低下的方法是为我要存储的每个类都有一个Map。

我决定的是一个HashMap

Integer>包含要存储的每个类的列表列表的键索引映射的单曲。例如,对的调用getString(String

key)将从映射中获取与该键关联的整数索引(如果存在),然后尝试在关联的中获取该索引处的对象ArrayList。

唯一的歧义是要么返回null(该类的列表中不存在索引),要么返回正确类的错误对象(存在映射索引,但使用该键存储的原始对象位于另一个List中)

,这实际上是程序员要检查的责任。

此类的对象只是临时容器,用于以标准化方式将数据从一个地方运送到另一个地方。他们不是要坚持下去。他们也不会以同样的方式为捆绑使用,虽然部分原因我想这样一个统一的数据容器是能够很容易地转换为Bundle,JSONObject,ContentValues或Cursor和背部。

也许真正的问题是:真的真的那么糟糕,还是我会竭尽全力避免这种情况?我猜想,好的编程实际上是避免这两种情况中模棱两可的唯一方法。

更新:

看起来Bundle仅在从Parcel中解包时才使用Classloader,但是在每次put()调用时都会对unparcel()进行调用。检索时,它仅在的try-

catch块内强制转换为方法返回的类型ClassCastException。那可能是最简单的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值