gc专题提供gc的最新资讯内容,帮你更好的了解gc。
这次主要来分析lua的gc。 首先lua中的数据类型包括下面9种,ni, Boolean, number, string, table,user data, thread , functions 以及 lightusedata.其中 string, table,thread , function 是会被垃圾回收管理的,其他的都是值存在。 因此我们来看对应的GC数据结构. 1 2 3 4 5 6 7
Lua 提供了一个自动的内存管理。这就是说你不需要关心创建新对象的分配内存操作,也不需要在这些对象不再需要时的主动释放内存。 Lua 通过运行一个垃圾收集器来自动管理内存,以此一遍又一遍的回收死掉的对象(这是指 Lua 中不再访问的到的对象)占用的内存。 Lua 中所有对象都被自动管理,包括: table, userdata、 函数、线程、和字符串。 Lua 实现了一个增量标记清除的收集器。它用两
     上一篇文章给了一个面向对象的方案,美中不足的是没有析构函数 Destructor,那么这一次就给它加上。   既然是析构,那么就是在对象被销毁之前做该做的事情,lua 5.1 的 userdata 可以给其 metatable 增加一个 __gc 域,指定一个函数,将会在被回收时调用,这个 __gc 只能用于 userdata,普遍的 table 不支持;到了 lua 5.2 以后,官方
lua 元表中有个很好用的方法就是 __gc,这个方法是在 table 被回收时会触发的回调,可以用来做一些 lua内存泄露 及 资源释放 等操作 怎奈这个方法在 lua5.1 版本是不支持的,5.2以上的版本才可以直接使用。 大部分 unity 和 cocos2dx 接入的tolua应该用的lua都是5.1的版本吧。在 stackoverflow 上搜到一个lua5.1实现 __gc 的解决方案
Lua 5.2(与5.1相反)支持表的__gc. LuaJIT是否借用了这个不错的功能? (我做了谷歌搜索,并检查了LuaJIT的Change History,但无法找到答案.) 就试一试吧: -- test.lua do local x = setmetatable({},{ __gc = function() print("works") end }) end collectg