Luajava HeapWorker在执行大脚本时被楔入

时间:2013-09-20 13:47:25

标签: java android sqlite lua luajava

在我的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个值)。对价值观的行动如下:

  1. 基于价值信息创建java对象
  2. 在java对象创建期间查询db(结果 - 在Cursor中)
  3. 执行脚本的漏洞时间变得相当长(我通过函数LuaState.pcall运行脚本)。 所以我的研究使我得到以下结果:   - 当我处理大约15个值(1000)时,调用'finalize'方法;   - 但脚本仍在执行,因此LuaState对象似乎被锁定(Mast3rPlan,感谢您的评论!)。并且它肯定会被锁定超过10秒(因为有近1000个值要处理)。并且所有这些同步块的finilize都无法输入。所以应用程序崩溃了。 请注意,即使删除同步块的大括号也没用。在这种情况下,LunRef方法被锁定(参见finalize method)。

    LuaJava API有问题吗?或者还有另一种执行脚本的方法,并且在完成时没有问题吗?

    提前感谢您的帮助!

0 个答案:

没有答案