在我的Android应用程序中,我正在
E / dalvikvm:HeapWorker被楔入:10629ms(通常超过10秒) 花在Lorg / keplerproject / luajava / LuaObject; .finalize()V
中
搜索答案并主要找到有关垃圾收集器的信息。之后我从代码中删除了所有的终结器。它没有帮助。将sqlite操作移动到事务也没有用。
情况是:
我有LuaTable,我迭代用值执行一些操作:
local myTable = getTable() -- function that returns table of values
for i,v in ipairs(myTable) do
someFunction(v)
end
表很大(差不多有1000个值)。对价值观的行动如下:
执行脚本的漏洞时间变得相当长(我通过函数LuaState.pcall运行脚本)。 所以我的研究使我得到以下结果: - 当我处理大约15个值(1000)时,调用'finalize'方法; - 但脚本仍在执行,因此LuaState对象似乎被锁定(Mast3rPlan,感谢您的评论!)。并且它肯定会被锁定超过10秒(因为有近1000个值要处理)。并且所有这些同步块的finilize都无法输入。所以应用程序崩溃了。 请注意,即使删除同步块的大括号也没用。在这种情况下,LunRef方法被锁定(参见finalize method)。
LuaJava API有问题吗?或者还有另一种执行脚本的方法,并且在完成时没有问题吗?
提前感谢您的帮助!