有人可以建议我如何(如果可能的话)阻止我的应用程序中的GC?

时间:2012-12-24 16:58:13

标签: android sqlite memory-leaks

所以我一直在用我的Android应用程序挣扎一段时间。我是Android编程的新手,并为客户制作了应用程序。那时我把它编程为三星的S2和S3等新设备。 现在我遇到了一个问题:垃圾收集。我已经阅读了一些关于机制以及如何减少GC的帖子,但我认为它不会有所帮助。我希望有人能告诉我如何照顾GC。

我的代码执行以下操作:它从名为vTiger的在线CRM下载大量数据。它是一个动态系统,因此应用程序可以获取大量链接数据,而不仅仅是(例如)带有用户名和密码的Users表。 现在进入JSON对象并将其拆分出来以便我可以使用所有数据,在这样的循环中:对于每个模块,获取所有记录。那些记录合计约为5000(现在,仍在使用中增长)。

很多信息,所以我将所有信息存储到ArrayList和ArrayList中,这是我用来保存信息的简单对象。我记得我不只是将对象写入数据库,而不是在数据库重载时将它们保存在ArrayList中。所以我所做的是将所有这些对象(大约5000 - 10000)保存在ArrayLists中,然后在SQLite数据库上使用Transactions。这种方式效果很好。

,但 在模拟器/旧设备上,我得到了很多GC_concurrent日志记录,这意味着我的代码中存在内存泄漏。我知道设备无法将所有这些对象保存在其内存中,但您将如何处理?由于GC,旧设备无法通过我的“同步”功能进行处理。例如,我让模拟器运行了几个小时,但在同步过程中几乎卡住了(非常非常非常慢)。

希望有人愿意给我一些建议,如果可能的话。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果您正在加载大量数据,那么您将获得GC峰值。真的没办法解决它。没有大量尖峰的唯一方法是将数据分块 - 将其分成更小的部分(可能是每个设备),然后在加载更多数据之前对其进行处理。

答案 1 :(得分:0)

不是一次请求服务中的所有数据,而是以块的形式请求数据。这样可以防止内存填满并强制使用小型GC。