A method of acquiring the memory of mobile phone application based on Lua is suitable for the application developed by Unity engine. It includes: initializing Lua virtual machine to pass in a custom memory allocator to the memory allocation function; when Lua calls the memory allocation function to allocate memory blocks, the memory divider traverses the current C call stack and the Lua call stack to capture memory information according to the call path; Memory information is put into the call path table, and the pointer that holds the corresponding call path is removed when the memory block is released; the call path table is exported and the call paths are sorted according to the total size of the unreleased memory block. The application also discloses a device based on Lua for acquiring memory of mobile application. The intentional effect of this application is that by mixing the output C# call stack and Lua call stack, it can obtain the C# and Lua code call paths which occupy more memory and facilitate developers to optimize them.
【技术实现步骤摘要】
一种基于Lua获取手机应用内存的方法及装置
本专利技术涉及移动设备领域,尤其涉及一种基于Lua获取手机应用内存的方法及装置。
技术介绍
在智能手机行业,手机游戏作为手机应用中的一个重要的大类,其市场占有率越来越高。大部分的知名游戏开发公司都在手机游戏开发投入了较多的技术研发。在手机游戏的开发过程中,降低手机游戏的内存占用率一直都是手机应用开发人员较为关心的点之一。若游戏运行过程中占用内存过多,可能会被操作系统认定为异常进程而直接关闭,也可能会因占用过多导致系统内存,使得系统性能降低,从而令游戏体验下降。Unity作为一种广泛应用的手机游戏开发引擎,采用Mono平台作为其C#虚拟机,并且支持Lua语言开发。具体地,目前基于Unity引擎开发的游戏一般通过slua以支持Lua语言进行游戏逻辑开发。对于游戏中Lua部分代码的内存分配和回收,主流的实现方案采用替换内存分配器,以方便统计以分配给Lua的内存和及时地释放相关内存。同时,上述实施方案也可以通过导出Lua调用栈来获得内存热点,为开发人员对手机游戏的进一步优化提供参考(例如确定手机游戏的性能瓶颈,改善卡顿或内存不足而引起的闪退问题)。然而,由于在Unity引擎所开发的手机游戏中,Lua代码部分与C#代码部分一般都会根据具体的应用场合而相互调用,因此如果仅输出Lua调用栈,那么开发人员很多时候无法获取到全面的内存调用信息。
技术实现思路
本申请的目的是解决现有技术的不足,提供一种基于Lua获取手机应用内存的方法及装置,通过混合输出C#调用栈和Lua调用栈,从而能够获得更为详细的Lua内存热点信息的效果。为了实现上 ...
【技术保护点】
1.一种基于Lua获取手机应用内存的方法,适用于Unity引擎开发的应用程序,其特征在于,包括以下步骤:S100)初始化Lua虚拟机以传入自定义的内存分配器到内存分配函数;S200)在Lua调用内存分配函数以分配内存块时,由所述内存分频器遍历当前C#调用栈和Lua调用栈以抓取内存信息;S300)按照调用路径记录内存信息到调用路径表中,并在释放内存块时移除保存有对应调用路径的指针;S400)导出调用路径表,并按照未释放内存块的总大小排序各个调用路径。
【技术特征摘要】
1.一种基于Lua获取手机应用内存的方法,适用于Unity引擎开发的应用程序,其特征在于,包括以下步骤:S100)初始化Lua虚拟机以传入自定义的内存分配器到内存分配函数;S200)在Lua调用内存分配函数以分配内存块时,由所述内存分频器遍历当前C#调用栈和Lua调用栈以抓取内存信息;S300)按照调用路径记录内存信息到调用路径表中,并在释放内存块时移除保存有对应调用路径的指针;S400)导出调用路径表,并按照未释放内存块的总大小排序各个调用路径。2.根据权利要求1所述的方法,其特征在于,所述内存信息至少包括内存分配大小、对象类型和内存块地址。3.根据权利要求1或2所述的方法,其特征在于,所述内存分配函数采用钩子函数的形式实现。4.根据权利要求3所述的方法,其特征在于,所述步骤S200还包括以下子步骤:S201)通过钩子函数形式的内存分配器捕获Lua分配内存的消息;S202)遍历当前C#调用栈和Lua调用栈以抓取内存信息;S203)散列所抓取的内存信息,并形成散列后内存信息的索引号。5.根据权利要求4所述的方法,其特征在于,所述步骤S300还包括以下的子步骤:S301)保存所述索引号及调用路径到调用路径表中;S302)保存所分配内存的内存指针、索引号和内存信息到内存分配信息索引...
【专利技术属性】
技术研发人员:刘马良,马力,刘鼎三,黎健钧,
申请(专利权)人:珠海金山网络游戏科技有限公司,珠海西山居移动游戏科技有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。