新功能!Lua,是时候和你走走心了!

栏目: Lua · 发布时间: 6年前

内容简介:目前,Lua已经俨然成为了各大研发团队中实现代码热更新功能的标配方案。它方便灵活,对于项目中增加功能和修复Bug非常方便。然而,随着Lua在项目中的大量使用,它所带来的性能问题也逐步成为了项目运行时的重大性能瓶颈之一。特别是内存相关的性能问题,无论是内存分配过大还是内存泄露无法回收,目前都已经在不少研发项目中集中爆发。为此,我们今天在UWA GOT中推出Lua的内存深度检测,凡是已购买了UWA GOT Online服务的用户,可通过真机测试后将测试数据上传至UWA官网分析,即可查看Lua内存的检测报告。

目前,Lua已经俨然成为了各大研发团队中实现代码热更新功能的标配方案。它方便灵活,对于项目中增加功能和修复Bug非常方便。然而,随着 Lua 在项目中的大量使用,它所带来的性能问题也逐步成为了项目运行时的重大性能瓶颈之一。特别是内存相关的性能问题,无论是内存分配过大还是内存泄露无法回收,目前都已经在不少研发项目中集中爆发。

为此,我们今天在UWA GOT中推出Lua的内存深度检测,凡是已购买了UWA GOT Online服务的用户,可通过真机测试后将测试数据上传至UWA官网分析,即可查看Lua内存的检测报告。

新功能!Lua,是时候和你走走心了!

目前的版本已经支持了较为主流的 uLua、ToLua、SLua 和xLua 。若研发团队将Lua的Native库重编译成自定义名字,可通过UWAEngine.SetOverrideLuaLib接口来指定库名。 Lua内存检测目前分为三个部分:总体堆内存、堆内存具体分配和Mono对象引用,下面我们将逐一介绍。

1、总体堆内存

该页面记录了Lua的总内存走势以及Lua中几种重要对象的数量:Table,Userdata和Function(由于通常情况下thread的数量较少且稳定,因此这里不再显示)。

新功能!Lua,是时候和你走走心了!

如上图所示,我们可以清晰地查看项目运行至某一帧时的Lua内存占用,从而评估该数值是否符合预期,是否存在内存泄漏的风险。

2、堆内存具体分配

该页面便于研发团队定位Lua堆内存分配较多的函数,我们可以查看这些函数在任意一帧的具体分配堆栈,帮助用户优化Lua的堆内存分配,降低Lua GC的触发频率和触发时的开销。

新功能!Lua,是时候和你走走心了!

注:Lua函数的命名格式为X@Y:Z,其中X是其函数名,在无法获取时,X会变为默认的unknown;Y是该函数定义的文件位置;Z则是该函数被定义的结束行号。需要注意的是,当Lua脚本以字节码运行时,该值将始终为0,因此建议在测试时尽可能使用Lua源码来运行。

同时,效仿之前的Mono堆内存倒序分析功能,在Lua的堆内存中我们同样可以这样查看。只需要切换查看方式,我们就可以直观地定位到底哪一个Lua脚本中的哪一行代码在分配大量堆内存。这样,研发团队就能直接打开对应的Lua脚本,找到那一行和函数直接修改,优化从此变得如此简单。

新功能!Lua,是时候和你走走心了!

3、Mono对象引用

在任意一种Lua插件中,都存在类似的机制:在C#层维护一个Cache来引用那些被Lua访问过的C#层对象,防止出现以下的问题:当Lua中再次访问该C#对象时,该对象可能已经被C#层的GC回收掉了,从而导致逻辑错误。 所以,在Lua中始终保留某个C#层对象的引用,将会导致其无法被释放,当这样的引用越来越多,就会导致C#层的内存泄漏。

为了便于用户排查这种情况,我们在Mono对象引用的报告页面中对上述的Cache中C#层对象进行了汇总,统计了Cache中出现的对象类型和各个类型的对象总数。当该对象继承自UnityEngine.Object时,还将统计该类型中已经被Destroy的对象数量,如下图所示:

新功能!Lua,是时候和你走走心了!

点击上图的每个对象类型,可以查看它们的总数变化。对于某些数量持续上涨的对象类型,可以通过对比两个不同采样点的对象引用,从而进一步定位Lua中不合理的引用。

新功能!Lua,是时候和你走走心了!

这次的Lua内存深度检测小编就安利到这里啦,关于CPU性能分析的功能我们也会在后续推出,力求为开发者提供更多支持,欢迎关注!

友情提示:Lua内存检测服务目前仅在UWA GOT Online中提供,同时需要大家更新使用的SDK哦!黑科技的大刀快耍起来!

关于UWA GOT Online

UWA GOT 是UWA推出的本地性能测评工具,它方便研发团队在本地真机测试,并能在编辑器中搭建本地服务器查看性能数据。现在,在UWA GOT现有的本地测评模式上,我们增加了线上同步和分析功能,研发团队可以将本地测评的数据快速同步到UWA官网,生成在线测评报告,提供更高效的性能分析数据及有针对性的优化建议。同时,贴心的版本对比功能,方便研发团队轻松监测每次测试中的重要性能参数变化趋势,从质量管控上为项目的研发保驾护航。


以上所述就是小编给大家介绍的《新功能!Lua,是时候和你走走心了!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python for Data Analysis

Python for Data Analysis

Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99

Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具