Android性能优化——内存优化
Android内存分配机制的问题
Java提供了完善的垃圾回收机制,让程序员不用关心回收内存问题,但是在实际使用中,还是会出现内存回收不完全的问题。这时候android系统看到了内存使用居高不下,就会不断的增加分配内存,最后导致整个应用卡顿或者死掉。
产生这类问题的原因
由于java拥有gc机制,按道理来说,这样的内存泄露是不会发生的,但是为什么还是会产生这样的现象呢?因为我们的引用被一个已经不可访问的对象持有,导致gc无法正确识别,所以产生了内存泄露。
如何避免
这里主要运用三个android sdk提供的工具来寻找和诊断
Memory moniter——实时监测应用内存的分配和使用情况
可以检测内存的实时使用和分配情况,当我们发现,内存分配越来越多,但是操作相同时,我们就知道发生了内存泄露。
Heap viewer——检测heap上的内存分配具体状况和每次gc回收的内存数量
可以进行gc操作,并看到每次gc的回收内存数量,还可以看到heap的内存分配情况,当heap内存分配越来越多,gc内存却越来越小,就发生了内存泄露。
Allocation tracker——检测每种类型的内存使用情况
可以看到具体每种类型的内存分配情况,从而更好的定位内存泄露。
其他开源工具——LeakCanary
直接引入项目并初始化,就会在运行时发生内存泄露的时得到提醒,并标明在何处泄露,具体可以参考其readme和网上其他文章。