内存优化是手机游戏开发者们极为关注的事情,手机内存技术更是短短几年间就走完了PC端花了几十年才走完的路。安卓手机3G RAM已经是中高端旗舰的标配,而传闻4G RAM的手机也即将在今年大规模上市。安卓基于Linux的内存管理机制决定了手游研发过程必然需要针对内存管理做大量的工作,今天我们就来聊聊内存那些事儿。
一般情况下,Linux的内存机制是无论你的手机内存多大,都会通过读取大量硬盘数据去充分利用你的内存以保证系统能够拥有更好的性能。
安卓系统继承了Linux这一内存机制,并且通过一定的规律去实现内存回收,系统在进行内存调度时有个阀值,只有当系统可用内存低于这个值时,系统才根据一定规律去关闭用户不需要的东西。这个值默认设置得很小,所以通常用户会发现安卓手机虽然开几个应用就会把内存占用到70%~80%,但随后无论你怎样开启应用手机也不会卡。这就是因为当你在开启新应用的同时系统也在关掉一些老应用。
虽然安卓有着良好的回收机制,但仍然有可能出现应用相互抢占内存导致内存溢出的现象,这是因为我们的手机在平时的使用场景往往非常复杂,安卓手机用户往往都会安装QQ、微信等长期驻留在内存空间的应用。假如在运行游戏的时候后台运行QQ、微信一类的应用,时长有可能会发生游戏卡顿、崩溃等现象。这样的现象在内存较小的中低端设备上尤为突出。那么游戏通常在什么情况下容易发生内存吃紧呢?
我们来看看具体事例,这是征途手游版在TestBird手游自动化云测试平台上的一组内存占用曲线,测试机型是HTC Desire816:
我们注意到游戏进行到第11分钟的时候,出现了内存突然剧增的现象。内存占用从80M左右暴增到181M,因此我们需要看看在这个时候游戏发生了些什么。
拖动时间轴到内存暴增之前,我们发现在内存占用较低的时候游戏是处在启动和登录状态,在创建角色的时候内存占用量开始增加,当人物创建完毕以后,进入游戏场景,此时游戏引擎会要求CPU读取大量数据到RAM当中,这样就导致内存占用会非常大。
同样的情况,通常在场景中出现大量单位或技能特效对CPU产生非常复杂的运算需求时,也很容易导致内存占用瞬间暴增。这样的情况就会容易导致内存溢出等现象,而作为开发者,一定要尽可能在游戏上线前通过大量的对自身游戏进行测试和优化,尽可能避免游戏的过程中出现内存溢出的现象。
文章来源:TestBird手游测试研究中心
|