TextVersion_06_Android性能优化

来源:互联网 发布:上饶网络教育报名时间 编辑:程序博客网 时间:2024/04/30 05:16

 

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,不

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击