在一些个人(琐碎)项目中尝试使用 LuaJ 时,我发现我似乎无法使用__gc
表元表,如下例所示:
do
local tbl = {id="tblID"}
setmetatable(tbl,{__gc=function(self) print("gc'd :"..self.id) end })
print(tbl.id)
end
collectgarbage('collect')
虽然我知道在 LuaJcollectgarbage()
中是一个冗余函数调用,但由于 LuaJ 依赖于 Java 自己的垃圾收集,我将它包括在内,因为其他一些解释器似乎需要它(例如 Lua 自己的http://www.lua.org/ cgi-bin/演示)
给定的示例似乎在上面提供的在线解释器中起作用。
我目前假设错误是 LuaJ 以某种方式或在程序执行结束时发生垃圾收集而不是在收集的对象上调用 __gc 元方法。
我已经尝试在应用程序结束之前给 java 足够的时间来 GC 表,方法是在调用之后提供一个漫长的等待期以及System.gc()
向运行时建议垃圾收集的调用,目前所有这些都无济于事。