下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

内存是手游的硬伤,解读什么是Mono内存

作者:课课家教育     来源: http://www.kokojia.com点击数:3859发布时间: 2017-01-03 09:48:33

标签: 手游开发Mono内存游戏开发

  在系统运维的文章中已经是和大家有做过内存的一个简单的介绍,在计算机中内存也是一个比较重要的物理设备,大的内存不仅是可以让你的计算机运行的更加流畅,并且也是体验更加好,其实在不仅是在计算机中,手机、实际上在游戏上也需要内存的大容量支持,这一点我们是有所体验过,电脑内存大,运行大型游戏也是比较顺畅的。

  我们都知道内存是游戏的一个硬伤,如果没有做好内存的管理问题,游戏极有可能会出现卡顿,闪退等影响用户体验的现象。本文主要是介绍一下在Unity游戏开发过程中常见的Mono内存管理问题,有在做这方面的朋友们可以参考一下。

  不管是在游戏还是VR应用,内存的一个管理都是其研发阶段的重中之重,但是90%以上的项目都存在不同程度的内存使用问题,就现在的基于Unity引擎开发的移动游戏和移动VR游戏而言,内存的开销都是围绕下面的三个方面:

  1.资源内存的占用;

  2.引擎模块自身内存占用;

  3.托管堆内存占用。

  本文将会是针对由Mono分配和管理的托管堆内存,介绍Unity游戏开发中面临的Mono内存管理的问题,有需要的可以参考一下。

  来看看什么是Mono内存?

  对于很多基于Unity引擎开发的项目而言,其托管堆内存是由Mono分配和管理的,这个“托管”的本意是Mono可以自动地改变堆的大小来适应你所需要的内存,并且是可以适时地调用垃圾回收(GarbageCollection)操作来释放已经不需要的内存,这样是在很大程度上降低开发人员在代码内存管理方面的门槛。

  看看Unity游戏在运行时的内存占用情况可以用下图表示:

内存是手游的硬伤,解读什么是Mono内存_手游开发_Mono内存_游戏开发_课课家

  大部分的Unity游戏逻辑代码所使用的语言为C#,我们知道C#代码所占用的内存又称为mono内存,由于Unity它是通过mono来跨平台解析并运行C#代码的,它在Android系统上面,因此游戏的lib目录下存在的libmono.so文件,就是mono在Android系统上的实现。

  C#的代码是通过mono来解析执行,所需要的内存自然也是由mono来进行分配管理,下面来介绍一下mono的内存管理策略以及内存泄漏分析。

  Mono内存管理的基本策略

  Mono通过垃圾回收机制(GarbageCollect,简称GC)对内存进行管理。Mono内存分为两部分,已用内存(used)和堆内存(heap),已用内存它指的是mono实际需要使用的内存,堆内存指的是mono向操作系统申请的内存,两者的差值就是mono的空闲内存。

逻辑

  当mono需要分配内存时,首先是会查看空闲内存是否足够,若足够的话,则是直接在空闲内存中分配,否则mono会进行一次GC以释放更多的空闲内存,如果GC之后仍然没有足够的空闲内存,则mono会向操作系统申请内存,并扩充堆内存,

  我们通过上文可以知道,GC它的的主要作用是在于从已用内存中找出那些不再需要使用的内存,并且是进行释放,在文中相信你是可以对Mono内存可以有一个好的了解,我们接下来

赞(25)
踩(4)
分享到:
华为认证网络工程师 HCIE直播课视频教程