いくつかの個人的な (些細な) プロジェクトで 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 独自のガベージ コレクションに依存しているため、他のインタープリターがそれを必要とするように思われるため、これを含めました (たとえばhttp://www.lua.org/にある Lua 独自のもの)。 cgi-bin/デモ)
与えられた例は、上記のオンライン インタープリターで機能するようです。
私は現在、何らかの方法でLuaJに問題があるか、プログラム実行の最後にガベージコレクションが発生し、収集されたオブジェクトで__gcメタメソッドを呼び出さないことが原因であると想定しています。
アプリケーションが終了する前に Java がテーブルを GC するのに十分な時間を与えようとしましたが、呼び出しに続いて長い待機期間を提供System.gc()
し、ランタイムにガベージ コレクションを提案するための呼び出しを行いましたが、現在はすべて役に立ちません。