当前位置:首页 > 内存 > 正文

lua内存机制

  • 内存
  • 2024-06-10 03:47:15
  • 7890

一、lua什么时候释放Lua提供自动内存管理。这意味着您不必担心分配内存来创建新对象,也不必在不再需要这些对象时主动释放内存。Lua通过运行垃圾收集器来自动管理内存,不断回收死对象(指Lua中不再可访问的对象)占用的内存。Lua中的所有对象都是自动管理的,包括表、用户数据、函数、线程​​和字符串。
Lua实现了增量标记和清除收集器。它使用两个数字来控制垃圾收集器周期:垃圾收集器暂停和垃圾收集器步乘数。
garbage-collectorpause控制收集器在开始新的收集周期之前等待的时间。随着数量的增加,收集器的工作积极性降低。小于1的值意味着收集器不再等待新周期开始。如果值为2,则表示当内存使用总量达到原来的两倍时,将开始新的循环。
步长乘数控制收集器相对于内存分配的速度。较大的数字会导致收集器更加积极地工作,并且还会增加每个收集步骤的大小。小于1的值将导致收集器运行非常缓慢,可能导致收集器永远无法完成当前周期。默认值为2,这意味着收集器的运行速度是内存分配器的两倍。
您可以通过在C中调用lua_gc或在Lua中调用collectgarbage来更改这些数字。两者都接受百分比值(因此传递参数100意味着实际值为1)。您还可以使用这些功能直接控制收集器(例如停止或重新启动)。
引用自:
二、为什么lua语言中使用全局变量就会造成内存泄漏呢??使多线程不安全。并不一定会造成泄漏。创建多个Lua虚拟机时,两个线程会同时操作一个变量。这是你的代码设计有问题
关于如何查找内存泄漏,我简单说一下。如果它是奇怪的代码,或者即使它是你的,你也懒得去猜测泄漏在哪里。,那么请参考云峰的泄漏测试工具:
三、lua如何占满内存创建多个变量或表并重复调用函数。
1.创建大量变量或表:可以创建大量局部变量或全局变量或创建大表占用内存。
2。重复调用函数:您可以编写一个将无限期重复调用的函数,从而增加内存消耗。