android – 堆内存分配的工作原理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – 堆内存分配的工作原理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2339字,纯文字阅读大概需要4分钟。
内容图文
![android – 堆内存分配的工作原理](/upload/InfoBanner/zyjiaocheng/955/f28d5cce87b145b1b6a0c23a137db397.jpg)
我正在开发一个应用程序,我有内存问题.
我开始研究这个东西,我遇到了Eclipse的调试系统.
我使用DDMS的堆测试程序来查看我的应用分配了多少内存.
我看到它大概是90%.
现在我做了一个简单的新项目,一个没有任何函数或变量的空白空活动.这是一个精彩的新项目.
我运行这个堆测试器,我看到了结果:
Heap size: 10,629 MB
Allocated: 9,189 MB
Free: 1,440 MB
Used: 86.45 %
Objects: 44,565
嗯,这是正常的吗?
我有一个非常简单的空白活动,没有别的,这个应用程序使用86%的内存?
分配9 MB 10?真?这是正常的吗?这是怎么回事?
请告诉我这个,因为我想知道这些内存分配是如何工作的.
解决方法:
检查堆使用有点棘手但同样容易.让我们来看看如何.
所以考虑一个小应用程序.您有Android调试工具来确定堆使用情况并检查它们.
你可以查看这个-memory-analysis-for-android,它有更多关于如何在android中有效分析应用程序的细节.
我们这里也有一个简短的描述:
启动DDMS有两种方法 –
1)使用Eclipse:单击Window> Open Perspective>其他…> DDMS
2)或从命令行:在tools /目录中运行ddms(或Mac / Linux上的./ddms)
然后从Devices中选择您的应用程序进程,然后单击“Update Heap”.
现在切换到DDMS中的Heap选项卡.
要查看第一次更新,请单击“原因GC”按钮.
你会看到这样的事情:
我们可以看到我们的集合(Allocated列)略高于20MB.如果你做一些小翻转,这个数字可以上升.在小型应用程序中,我们泄漏的内存量是有限的.在某些方面,这可能是最糟糕的泄漏,因为我们永远不会得到OutOfMemoryError,表明我们正在泄漏.
您可以使用堆转储来识别问题.单击DDMS工具栏中的转储HPROF文件按钮,然后将文件保存到任何位置.然后运行hprof-conv.
使用MAT作为强大的Memory Analyzer工具 –
您可以从SITE安装MAT,这是一个独立的内存分析器工具,并使用它分析堆转储.
注意:
如果你正在运行ADT(包括DDMS的插件版本)并且在Eclipse中安装了MAT,单击“dump HPROF”按钮将自动进行转换(使用hprof-conv)并打开转换后的hprof文件进入Eclipse(将由MAT打开).
启动MAT并加载转换后的HPROF文件.导航到直方图视图,该视图显示可按实例数排序的类列表,浅堆(所有实例使用的内存总量)或保留堆(所有实例保留的内存总量,包括其他对象)他们引用了).
如果我们按浅堆排序,我们可以看到byte []的实例位于顶部.
接下来,右键单击byte []类并选择List Objects>有来电参考.这将生成堆中所有字节数组的列表,我们可以根据Shallow堆使用情况对其进行排序.
选择一个大对象,然后向下钻取.这将显示从根集到对象的路径 – 保持此对象存活的引用链.瞧,有我们的位图缓存!
MAT无法确定这是否是泄漏,因为它不知道是否需要这些对象 – 只有程序员可以这样做.但是,查看统计信息可以预见,缓存相对于应用程序的其余部分使用了大量内存,因此我们可能会考虑限制缓存的大小.
一直这样,你会看到大量的性能优化.
内容总结
以上是互联网集市为您收集整理的android – 堆内存分配的工作原理全部内容,希望文章能够帮你解决android – 堆内存分配的工作原理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。