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