TextVersion_06_Android性能优化

 

Android性能优化

专业分析工具

 

一个app流畅不流畅,用一会儿就有感觉了

但是我们可以通过专业分析工具来更好的分析我们的应用

 

如果不考虑使用其他第三方性能分析工具,我们可以直接使用ddms中的工具

ddms中有traceview, heap, allocaton tracker 都可以帮助我们分析应用的方法执行时间效率和内存使用情况

 

traceview可以看博客的第47

 

heap工具可以帮助我们检查代码中是否存在会造成内存泄漏的地方

heap监测应用进程使用内存情况的步骤如下:

1.启动eclipse,切换到DDMS视图,确认Devices,heap视图都是打开的

2.点击选中想要监测的进程,比如system_process

3.点击选中Devices视图界面中最上方一排图标中的”Update Heap”图标

4.点击Heap视图中的”Cause GC”按钮

5.此时在Heap视图中就可以看到当前选中的进程的内存使用的详细情况

 

说明:

1.点击”Cause GC”按钮相当于向虚拟机请求了一次gc操作

2.当内存使用信息第一次显示以后,不用再点击”Cause GC”,Heap视图界面会定时刷新

在对应用的不断操作过程中就可以看到内存使用变化

3.如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap 视图中部有一个 Type

叫做 data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在 data object 一行中有一列是

Total Size”,其值就是当前进程中所有 Java 数据对象的内存总量,一般情况下,这个值的大小决定了是否会

有内存泄漏。

 

可以这样判断:

1.不断的操作当前应用,同时注意观察 data object Total Size 值;

2.正常情况下 Total Size 值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对

象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行 GC 的过程

中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;

3.反之如果代码中存在没有释放对象引用的情况,则 data object Total Size 值在每次 GC 后不会有明显

的回落,随着操作次数的增多 Total Size 的值会越来越大,直到到达一个上限后导致进程被 kill 掉。

4.此处以 system_process 进程为例, 在我的测试环境中 system_process 进程所占用的内存的 data object

Total Size 正常情况下会稳定在 2.2~2.8 之间,而当其值超过 3.55 后进程就会被 kill

 

总之,使用 DDMS Heap 视图工具可以很方便的确认我们的程序是否存在内存泄漏的可能性。

 

 

 

 

allocation tracker

 

运行 DDMS,只需简单的选择应用进程并单击 Allocation tracker 标签,就会打开一个新的窗口,单击“Start

Tracing”按钮;

然后,让应用运行你想分析的代码。运行完毕后,单击“Get Allocations”按钮,一个已分配对象的列表就会出

现第一个表格中。

单击第一个表格中的任何一项,在表格二中就会出现导致该内存分配的栈跟踪信息。通过 allocation tracker,不

仅知道分配了哪类对象,还可以知道在哪个线程、哪个类、哪个文件的哪一行。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android,性能优化,heap,性能分析,traceview)