lua内存泄漏查证
本文主要介绍某项目脚本(lua)部分内存泄漏的查证与处理过程,希望对大家有点
帮助。需要说明的是,lua本身并不存在真正的内存泄漏,只是因为使用上面的原
因导致无法gc,从而导致逻辑上的泄漏:)。
参考GCObject的声明可以发现,lua中的复杂数据类型变量的传递都是基
于引用的。当lua从根开始gc扫描的时候,只要还有一个地方有对此变量的引用,那
么
转载
2024-04-17 10:48:37
47阅读
一、Lua性能优化table的频繁查找,尽可能使用local变量,不要在循环中做大量表的查找,例如不要在循环中用全局函数,不要使用math.floor这种,而是将它的值提前存储在局部变量,因为即使是hash表的查找也会比较耗时;频繁的创建新的对象,不要在循环中频繁创建新表,如a = {}这种操作等,要有缓存池的概念;配置表的格式优化,配置表通常在游戏中占比很大,所以配表的优化也很重要;二、Lua垃
C#访问Lua这里指的是C#主动发起对Lua数据结构的访问。一、获取一个全局基本数据类型访问LuaEnv.Global就可以了,上面有个模版Get方法,可指定返回的类型。luaenv.Global.Get<int>("a");
luaenv.Global.Get<string>("a");
luaenv.Global.Get<bool>("a");二、访问一个全
转载
2024-03-26 14:23:22
130阅读
文章目录一、Lua是什么二、Lua特性(一)轻量级(二)可扩展(三)其它特性三、Lua安装四、Lua应用 看到评论说,C++让我见识了语言的严谨与缜密,lua让我见识到了语言的精巧与创新,希望我也可以学习到。 2023.11.26 一、Lua是什么Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Ja
写了将近两年的lua语言,一直都在openresty框架下面进行开发,总结了几点lua语言的技巧记录下来,也给大家提供一些参考,有什么不对的地方可以一起讨论。1.如果是一些经常用到的全局函数,可以申明为local局部变量,这样可以提升效率。
例如ipairs,pairs申明成local的,原因是local变量是存放在lua的堆栈里面的是array操作,而全局变量是存放在_G中的table中,
转载
2024-03-03 13:54:56
62阅读
近段时间处理了一些Lua相关的性能和内存问题,分享记录下 1.lua内存增长很快,但gc可以降低的情况 一个小场景,角色站着不动内存就会稳定的增长,对比了unity profiler里的数据,没有特别显著的变化,但是lua内存增长了很多 执行lua gc后会大幅降低。说明是临时对象占用的内存,不gc释放不掉。也确实没开自动gc和定期gc,也算是为了暴露问题。接着用windows sdk里的um
转载
2024-05-09 10:50:12
145阅读
由于目前正在负责的项目是一个二次开发项目,而且留给我们的代码质量实在让人无力吐槽,所以遇到了不少大大小小的坑,好在慢慢都淌过去了。最近就遇到了一个内存泄漏的问题,泄漏发生在lua里,项目代码里以前的开发团队留下了检测泄漏的代码,但也仅限于此。由于代码量庞大,所以想从逻辑上梳理清楚哪里的引用没干掉导致了内存泄漏几乎就是大海捞针。好在解决的过程比较顺利,这篇文章就来谈一谈Lua中如何解决内存泄漏的问题
转载
2024-04-24 09:13:20
86阅读
假定你要拼接很多个小的字符串为一个大的字符串,比如,从一个文件中逐行读入字符串。你可能写出下面这样的代码: 尽管这段代码看上去很正常,但在Lua中他的效率极低,在处理大文件的时候,你会明显看到很慢,例如,需要花大概1分钟读取350KB的文件。(这就是为什么Lua专门提供了io.read(*all)选项,读取同样的文件只需要0.02s)为什么这样呢?Lua使用真正的垃圾收集算法,但他发现程序使用太多
转载
2024-03-19 12:46:35
223阅读
Lua会造成内存泄露的表征分析: #因素一:(实例型)实体资源的创建持有者和调用者,相互之间如果太过信任,那么对调用者就会形成过高的要求,创建者可以让任意的调用者进行任意的create,调用者消费后以为创建者会管理(销毁),但其实并非如此,比如有这样一个实体管理器xxxManager,它有接口createXXX/removeXXX, 那么,创建和销毁的权利都丢给了调用者,如果调用者光creat
转载
2024-04-15 11:31:58
95阅读
上周UWA发表了一片博文Lua性能优化—Lua内存优化作者分享了在unity中lua使用的不少干货,文中提到两个lua的小插件,一个是内存检查工具Snapshot,一个是性能分析工具LuaProfiler。 正好上周笔者也涉猎到了这方面的实践上,作为记录我将操作步骤分享下。 1.首先Snapshot是云风大大曾经的一篇博文提到的工具一个 Lua 内存泄露检查工具 2.其次Profiler也是
转载
2024-03-22 20:07:28
135阅读
这两天剖析了一下socket.lua,整体不是很难,主要是数据缓冲区的实现需要好好分析一下。这里读写数据也是用到了缓冲池的思想,为了更加直观的说明代码,还有方便测试,我去掉lua代码,把核心接口直接用C++实现了一遍:#include <stdio.h>
#include <string.h>
#include <vector>
using std::vecto
转载
2024-02-27 14:59:34
183阅读
作者:敏捷小菜
本文从Lua语法的角度来介绍Lua内存出现泄露的问题;
1、在多次刷新的情况下不停的 新建table;
如 Update()是一个不停被回调的函数,那么在Update里,
function Update()
local t = {};--创建表,内存泄露,游戏常见到
end
转载
2024-03-23 12:39:14
147阅读
缓存池基本写法---------------------------------
-- Lua Class对象池
-- 自己管理好池的清空时机
---------------------------------
ObjectPool = Class( "ObjectPool" );
-- 构造函数,传需实例化的对象
function ObjectPool:Ctor( class )
se
转载
2024-04-13 12:47:05
35阅读
前言最近做的手游项目(Unity+tolua架构)快接近尾声了,功能差不多齐备之后开始对各种技术指标进行优化。Unity自带的Profiler能对C#的Cpu和内存使用状况进行比较好的分析,但是无法涵盖lua部分,很多人可能跟我一样,对lua部分的优化觉得无从下手。本人在网上搜了很多工具之后发现了这个很实用的工具,能够对内存消耗情况和lua和mono的GC进行很好的监测,废话不多说,一起来看。安装
转载
2024-03-07 10:47:59
307阅读
主要参考:https://www.lua.org/gems/sample.pdf更多内容可参考:http://lua-users.org/wiki/OptimisationTips知乎-Lua性能优化(二):CPU性能优化tabletable的频繁查找,尽可能使用local变量,不要在循环中做大量表的查找,例如不要在循环中用全局函数,不要使用math.floor这种,而是将它的值提前存储在局部变量
转载
2024-04-22 16:25:35
40阅读
Why Lua---------------------------------------------一个功能强大,快速,轻量级,可嵌入的脚本语言。程序语法构造简单,用关键数组来实现强大的数据描述功能,同时还提供一些可扩展的语义特征动态类型,无需编译,由解释器先翻译成lua虚拟机的指令, 然后在虚拟机(基于寄存器实现)上运行.使用一个采用增量策略的GC来管理内存1、Fast, 最快的脚本语言,l
转载
2024-03-13 22:59:11
130阅读
1. 背景我们项目为ARPG手游(也没啥见不得人的,就叫暗黑血统手游,后期不少坑钱活动的实现出自我手,轻拍。。。)。我们的服务器底层设计源于某大厂,c/c++和luajit的实现,这次要说的是项目上线时(2014年11月左右)的一次luajit对象内存泄漏(废弃的数据没删,我们都叫泄漏)和相应的解决方案。2. 问题表现内存增长,速率大概为200~300MB/天。我们日志会周期性打印Tcmalloc
转载
2024-04-14 21:39:29
90阅读
Lua 语言的简单介绍 1. Lua的特点 Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它的主页是 www.lua.org。Lua最著名的应用是在暴雪公司的网络游戏WOW中。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广
转载
2024-08-28 22:16:52
88阅读
2006 年 6 月 12 日虽然编译性编程语言和脚本语言各自具有自己独特的优点,但是如果我们使用这两种类型的语言来编写大型的应用程序会是什么样子呢?Lua 是一种嵌入式脚本语言,它非常小,速度很快,功能却非常强大。在创建其他配置文件或资源格式(以及与之对应的解析器)之前,请尝试一下 Lua。尽管诸如 Perl、Python、PHP 和 Ruby 之类的解释性编程语言日益被 Web 应用程序广泛地
Lua内存管理机制Lua 使用的是垃圾自动回收机制。 Lua 主要是通过运行一个垃圾收集器来收集所有垃圾(Lua 中不会被访问到但还没销毁的对象)以完成自动内存管理的工作。Lua的垃圾清理过程由4个阶段组成:标记、整理、清扫和收尾。标记阶段:Lua先将“根集合”中的对象标记为“活跃”。根集合中的对象就是Lua可以直接访问的对象,它们是注册表中的对象和主线程对象。然后,Lua将任何程序可以
转载
2024-02-17 13:04:57
209阅读