一、概述
lua实现了对象间的引用管理,在对象不被其他对象应用时,自动释放对象的内存。
二、lua对象类型和数据结构
1、哪些类型需要GC
lua的基本类型包括nil、boolean、number、lightuserdata、string、table、function、userdata、thread九种数据类型,另外还有proto、upvalue两种内部类型。
其中string、table、function、userdata、thread、proto、upvalue是引用类型,可以被其他多个对象同时引用,需要通过自动GC机制来回收。
2、GC根
gc的根包括主线程(lua_State)、注册表(registry)和9种基本类型的元表(mt),其他的线程会被主线程的栈帧引用。

3、GC对象管理
GC管理的对象类型包括string、table、function、userdata、thread、proto、upvalue,这些类型的结构体包含相同的GC信息头,被命名为GCObject。所有分配的对象会被global_State结构体里的rootgc所管理。string是个例外,string不会再引用其他对象,但可以被多个对象引用,string被单独放在了strt里管理。
下面是除string外对象的管理示意图,绿色文字节点为最新创建的对象。

下面是string对象的管理示意图,绿色背

本文深入分析了Lua5.1.3的垃圾回收(GC)机制,涵盖了对象类型、GC根、GC对象管理、GC的实现原理如三色标记法,以及GC的分类、时机、阶段,并通过实例演示了GC步骤。文章详细阐述了Lua中哪些类型需要GC、GC根的组成以及GC对象如何管理。
最低0.47元/天 解锁文章
1670

被折叠的 条评论
为什么被折叠?



