LuaJ支持__gc元方法功能吗?

当在一些个人(琐碎)项目上尝试LuaJ时,我发现我似乎无法像下面的示例中那样在表元表中使用 __gc

do
    local tbl = {id="tblID"}
    setmetatable(tbl,{__gc=function(self) print("gc'd :"..self.id) end })
    print(tbl.id)
end
collectgarbage('collect')

虽然我知道在 LuaJ 中,collectgarbage() 是一个多余的函数调用,因为 LuaJ 依赖于Java自己的垃圾收集,但我还是包含了它,因为一些其他解释器似乎需要它(例如Lua自己在http://www.lua.org/cgi-bin/demo上)。

上述示例似乎在提供的在线解释器中运行正常。

我目前假设故障要么与LuaJ有关,要么是在程序执行结束时进行垃圾收集不调用被收集对象上的 __gc 元方法。

我尝试了给Java足够的时间来GC表,提供了长时间的等待时间以及调用 System.gc() 来建议运行时进行垃圾收集,但目前都没有成功。

点赞