且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

移动App性能测评与优化1.4 进阶:内存原理

更新时间:2021-08-04 04:23:59

1.4 进阶:内存原理

在上一节里,我们通过深入调查Dalvik虚拟机的方式,解决了Dalvik Heap Pss消耗内存过高的问题。除了Dalvik Heap Pss部分之外,应用还有其他许多消耗内存的部分。本节主要介绍其他部分的内存是如何被分配和消耗的。

同样以我们的应用为例,在几个版本之后,新加入了一个缓存功能。缓存功能会预先取一些手机的信息,并放在内存***其他功能使用,这样可以减少后续功能的消耗,加快运行速度。

有了之前的经验,我们自然会想到不能简单粗暴地将所有缓存一次生成,这样可能会产生大量的碎片,因此需要选择一种合适的策略来进行。在选择新功能的缓存策略时,内存测试也同样有用,通过对不同策略的测试,决定哪种策略比较有效,并且消耗内存比较少。

在测试过程中我们发现,随着使用不同的策略,Dalvik Heap部分会随之增减。与此同时,不同策略执行代码的时机也会使Dalvik Other和Dex Mmap的内存消耗变化。总结规律如下:

不生成缓存时,Dalvik Other和Mmap会随之下降。

按需生成缓存时,即使只生成一条记录,Dalvik Other和Mmap也会增加。

生成多条缓存记录时,Dalvik Other和Mmap会在开始增加,然后一直保持不变。

Dalvik Other不会下降,Mmap偶尔会下降。

通常我们只是大致了解到,Dalvik Other和Mmap和代码数量相关,对于越复杂的应用,这部分内存就越多,并没有进行过定量的分析。但现在随着对Dalvik Heap部分的优化,我们发现Dalvik Other和Mmap在内存中的比重越来越大。在这个版本里,占总内存的将近一半,不能再置之不理,而是要寻找办法对这部分内存进行优化。

对于这些不熟悉的部分,我们首先要先去了解背后的原理,才能够针对性地去研究这些内存是如何被消耗的。