Android内存分析工具

Dalvik 虚拟机支持垃圾收集,但是这不意味着你可以不用关心内存管理。你应该格外注意移动设备的内存使用,手机和平板 的内存空间是受到限制的。

在这篇文章里面,我们来看看Android SDK里面的一些内存剖析工具(profiling tools)是 如何帮助我们修整应用程序的内存使用。

一、 内存泄露

一些内存使用问题是很明显的,例如,如果在每次用户 触摸屏幕的时候应用程序有内存泄露,将会有可能触发OutOfMemoryError,最终程序崩溃。

另外一些问题却很微妙,也 许只是降低应用程序和整个系统的性能(当高频率和长时间地运行垃圾收集器的时候)。

二、 内存工具

Android SDK 提供了2个主要的剖析应用程序内存使用情况的工具:Allocation Tracker 和 heap dumps

1)Allocation Tracker 是很有用的,特别是当你想得到程序在一定的时间里内存的分配情况的一种感性认识的时候。但是它不能给你任何关于程序heap 总体情况的任何 信息。关于Allocation Tracker的更多信息,请看文章Tracking Memory Allocations

2)heap dumps ,它是更强大的内存分析工具,一个heap dump就是一个程序heap的快照,它保存为一种叫做HPROF的二进制格式。Dalvik用的也 是类似的格式,但是不完全一样,这里是Java 的HPROF工具 。有很多方法去生成一个运行时应用程序的heap dump,其中一种就 是使用在DDMS里边的Dump HPROF file按钮,如果想产生更精确的dump数据,可以在程序中使用 android.os.Debug.dumpHprofData() 方法。

分析heap dump,你可以使用一些标准的工具比如 jhat 或者Eclipse MAT( Memory Analyzer Tool) 。不过,首先需要把.hprof文件从Dalvik格式转换成J2SE HPROF格式,你可以使用Android SDK提供的 hprof-conv工具。例如:

hprof-conv  dump.hprof  converted-dump.hprof

三、 内存调试

Dalvik 运行时里,程序员不能显式地分配和释放内存,所以这里的内存泄露跟C和C++里面的不同。在你的代码里,内存 泄露就是你保留了一个并不再需要的类对象的引用,有时候仅仅一个引用就会阻碍gc对一大堆对象的回收。

我们来过一 个实际的例子,Android SDK里面提供的范例程序Honeycomb Gallery sample app 。它是一个photo gallery程序,用来演示一 些新的Honeycomb API的使用。(下载和编译这些代码,请看这些 命令 )我们会有意地加入一个内存泄露在程序里边,然后来 演示如何调试它。

想象一下我们想修改程序让它从网络下载图片,为了让它更具备灵活性,我们可以考虑实现一个缓存 ,保存最近查看过的图片,我们可以对ContentFragment.java做一些小的修改来达到这个目的。在class顶部,我们增加一个新 的静态变量:

private static HashMap<String,Bitmap> sBitmapCache = new HashMap<String,Bitmap> ();

这里是我们保存缓存的地方,现在可以修改updateContentAndRecycleBitmap()方法,让它在下载之前先查看是否数 据已经存在,如果不存在就去下载,然后添加数据到缓存。

void updateContentAndRecycleBitmap (int category, 

int position) {
    if (mCurrentActionMode != null) {
        mCurrentActionMode.finish();
    }     

    // Get the bitmap that needs to be drawn and update the ImageView.     

    // Check if the Bitmap is already in the cache
    String bitmapId = "" + category + "." + position;
    mBitmap = sBitmapCache.get(bitmapId);     

    if (mBitmap == null) {
        // It's not in the cache, so load the Bitmap and add it to the cache.
        // DANGER! We add items to this cache without ever  removing any.
        mBitmap = Directory.getCategory(category).getEntry(position).getBitmap(getResources());
        sBitmapCache.put(bitmapId, mBitmap);
    }     

    ((ImageView) getView().findViewById(R.id.image)).setImageBitmap(mBitmap);
}

在这里故意引入了一个内存泄露的问题:我们把图片加入了缓存但是从来没有移除他们,在真实的应用里,我们可以 会用某种方法来限制缓存的大小。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存
, 工具
, 缓存
, dalvik
, 程序
, 应用程序
, hprof
, 内存泄露内存android
, 图片缓存android
, 缓存android
, 一个
, android缓存实现
, android数据缓存
Android图片缓存
android内存检测工具、android内存优化、android 内存泄露分析、android 性能分析工具、android内存分析,以便于您获取更多的相关知识。

时间: 2024-08-02 13:45:20

Android内存分析工具的相关文章

android内存分析

在任何软件开发环境中,RAM都是非常宝贵资源.在移动操作系统里,由于物理内存的限制,它会变得更加的宝贵.虽然Android的Dalvik虚拟机会常规的执行垃圾回收,但是开发人员仍然不能忽略什么时候.在哪里申请和释放内存资源. 为了能够使垃圾回收器从应用里正常的回收内存资源,开发人员需要避免产生内存泄露,注意在合适的时候释放引用Reference(内存泄露常常由于保持着全局变量的引用).对于大多数应用,Dalvik垃圾收集器会处理大部分的回收工作:系统会在对应脱离活动线程的作用域后回收你申请的内存

正确使用Android性能分析工具——TraceView

前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看不懂TraceView界面下方数据指标的值代表什么意思-以前我用StopWatch类来分析性能,现在觉得弱爆了-不过有些地方StopWatch工具类还是很简单好用的~ 网上可以找了很多博客来介绍这个工具的使用方法,很多都是讲解了一些一些就会的方法,讲一个大概,包括StackOverFlow上我也没有找到很

正确使用 Android 性能分析工具——TraceView

前面唠叨 最近公司app中有些列表在滑动的时候会有卡顿现象,我就开始着手解决这些问题,解决问题之前首先要分析列表滑动的性能瓶颈在什么地方.因为之前不会正确使用TraceView这个工具,主要是看不懂TraceView界面下方数据指标的值代表什么意思-以前我用StopWatch类来分析性能,现在觉得弱爆了-不过有些地方StopWatch工具类还是很简单好用的~ 网上可以找了很多博客来介绍这个工具的使用方法,很多都是讲解了一些一些就会的方法,讲一个大概,包括StackOverFlow上我也没有找到很

Android内存检测工具

无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使用eclipse的ADT插件,并以真机为例,在模拟器中的情况类似).用 Heap监测应用进程使用内存情况的步骤如下: 1. 启动eclipse后,切换到DDMS透视图,并确认Devices视图.Heap视图都是打开的: 2. 将手机通过USB链接至电脑,链接时需要确认手机是处于"USB调试&q

Solaris8安装内存分析工具memtool安装使用文档

前言 昨天看了一本<The Solaris Memory System>的书,里面写了很多关于内存监控和内存优化方面的东西,还介绍了一个关于内存监控的软件,总体感觉这个工具对solaris系统的内存的分析比较细,对我们解决内存方面瓶颈时,应该有很大的帮助. 本人声明如需转载请保留如下信息: 作者:SOLARIS小兵 MAIL:solarisxb@hotmail.com FROM:WWW.CHINAUNIX.NET 一.软件安装系统环境: 1.系统硬件:SUN F280 solaris8 2.操

WinCE6.0内存分析工具

      <Memory Usage Tool for Windows CE 6.x>中介绍了一个用于查看和分析WinCE6.0内存状态的工具,具体内容参见原文.       该工具主要有两部分组成,一个是运行于设备端的命令行程序(DevHealth60.exe),另一个是运行于PC端的分析和显示内存状态报告的工具(DevHealthViewer6.exe).       为了方便使用,写了一个小工具(HealthHelper)配合DevHealth60.exe.用法很简单,将其和DevHe

通过内存分析工具来证明字符串驻留机制

在这之前我写过一些文章来介绍关于字符串内存分配和驻留的文章,涉及到的观点主要有:字符串的驻留机制避免了对具有相同字符序列的字符串对象的重复创建:被驻留的字符串是不受GC管辖的,即被驻留的字符串对象不能被GC回收:被驻留的字符串是被同一进程中所有应用程序域共享的.至于具体的原因,相信在<关于CLR内存管理一些深层次的讨论>中,你可以找到答案.由于这些天来在做一些关于内存泄露审查的工作,所以想通过具体的Memory Profiling工具来为你证实上面的结论.我采用的Memory Profilin

Android性能分析工具的使用

一.Android Studio-Memory Monitor 使用方法 run起你的项目,找到Memory Monitor窗口,选择Memory   [转]内存变化波形图 另外,还可选择查看CPU和GPU还有NetWork的使用情况.  网络使用波形图.png 其中NetWork的频繁使用是造成应用耗电的关键,70%左右的电量是被上报数据,检查位置信息,定时检索后台广告信息所使用掉的.如何平衡这两者的电量消耗,就显得非常重要了. 二.Android Studio 1.5 Preview 新玩具

android内存泄露分析工具MAT详解

一.准备 1.什么是MAT Eclipse提供的一个内存分析工具.它是一个功能丰富的 JAVA 堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消耗. android studio未集成该插件 需要你下载独立版 android studio的DDMS可以生成hprof是什么文件,不过需要进行一下格式转化(.hprof文件从Dalvik格式转换成J2SE HPROF格式),才可以导入MAT独立版软件. 2.hprof是什么文件 heap dumps,中文翻译,堆转储,快照.即堆内存某个时刻的情