java – 如何在Android或性能基准测试中获取对象的内存大小?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何在Android或性能基准测试中获取对象的内存大小?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2162字,纯文字阅读大概需要4分钟。
内容图文
![java – 如何在Android或性能基准测试中获取对象的内存大小?](/upload/InfoBanner/zyjiaocheng/951/818b0bba71464571abaf2a306cdcf743.jpg)
长话短说,我想测试我的android.os.Bundle类的克隆实现
反对那个班级,看看哪个更好.我已经知道我的版本可能会更糟,但我想知道有多糟糕.是否有适用于Android的基准测试工具,我可以使用它来查看哪个对象在内存中更大和/或需要更多处理时间来存储/检索值?
TL; DR:
我查看了android.os.Bundle类的源代码,我不喜欢它如何存储和返回对象.它只是将它们存储在HashMap< String,Object>中.然后使用ClassLoader强制转换为请求对象的类(如getString()或getInt()).我觉得这个,或任何类别的演员都违反了类型安全,并在编程层面引入了歧义,这是静态打字旨在防止的,不是吗?
我想创建一个类似的数据容器类,它不违反类型安全性并且不会引入歧义.逻辑上简单但效率明显低的方法是为我想要存储的每个类创建一个Map.
我决定的是单个HashMap< String,Integer>包含我想要存储的每个类的各种列表的键索引映射.例如,对getString(String key)的调用将从映射中获取与该键相关联的整数索引(如果存在),然后尝试在关联的ArrayList< String>中获取该索引处的对象.
这里唯一的歧义是返回null(该类的List中不存在索引)或右类的错误对象(映射索引存在但原始对象与该键存储在另一个List中) ),这确实是程序员检查的责任.
此类的对象只是临时容器,用于以标准化方式将数据从一个地方传送到另一个地方.他们并不打算坚持下去.它们也没有像Bundles一样使用,虽然我想要像这样的统一数据容器的部分原因是能够轻松转换为Bundle,JSONObject,ContentValues或Cursor并返回.
或许真正的问题是:是否真的那么糟糕,或者我只是为了避免它而采取极端努力?我想好的编程实际上是避免两种情况模糊的唯一方法.
更新:
看起来Bundle只在从包中解压缩时才使用Classloader,但它会在每次调用put()时调用unparcel().检索它时,只需转换为方法返回的类型,在ClassCastException的try-catch块内.这可能是最简单的方法.
解决方法:
Are there any benchmarking tools out there for Android that I can use
to see which object is bigger in memory and/or takes more processing
time to store/retrieve values?
是的,Android为开发人员提供了许多很棒的工具,建议他们去了解它们.在这里你有一个良好的开端link官方文档.
假设您在Eclipse中,切换到DDMS透视图.
现在,这些视图应该有助于您测量内存:
>分配跟踪器.您可以看到哪些对象占用了多少内存.在运行期间,您必须按下“开始跟踪”按钮,然后按“获取分配”按钮.
>堆.您可以看到从堆中获取了多少内存.
要分析您的应用程序,请查看瓶颈等.使用Traceview.要从Eclipse打开Threads视图方便地调用它,在运行程序时单击带有红色圆圈的按钮,如“record button”.
内容总结
以上是互联网集市为您收集整理的java – 如何在Android或性能基准测试中获取对象的内存大小?全部内容,希望文章能够帮你解决java – 如何在Android或性能基准测试中获取对象的内存大小?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。