所以我一直在用我的Android应用程序挣扎一段时间。我是Android编程的新手,并为客户制作了应用程序。那时我把它编程为三星的S2和S3等新设备。 现在我遇到了一个问题:垃圾收集。我已经阅读了一些关于机制以及如何减少GC的帖子,但我认为它不会有所帮助。我希望有人能告诉我如何照顾GC。
我的代码执行以下操作:它从名为vTiger的在线CRM下载大量数据。它是一个动态系统,因此应用程序可以获取大量链接数据,而不仅仅是(例如)带有用户名和密码的Users表。 现在进入JSON对象并将其拆分出来以便我可以使用所有数据,在这样的循环中:对于每个模块,获取所有记录。那些记录合计约为5000(现在,仍在使用中增长)。
很多信息,所以我将所有信息存储到ArrayList和ArrayList中,这是我用来保存信息的简单对象。我记得我不只是将对象写入数据库,而不是在数据库重载时将它们保存在ArrayList中。所以我所做的是将所有这些对象(大约5000 - 10000)保存在ArrayLists中,然后在SQLite数据库上使用Transactions。这种方式效果很好。
,但 在模拟器/旧设备上,我得到了很多GC_concurrent日志记录,这意味着我的代码中存在内存泄漏。我知道设备无法将所有这些对象保存在其内存中,但您将如何处理?由于GC,旧设备无法通过我的“同步”功能进行处理。例如,我让模拟器运行了几个小时,但在同步过程中几乎卡住了(非常非常非常慢)。
希望有人愿意给我一些建议,如果可能的话。 提前谢谢!
答案 0 :(得分:0)
如果您正在加载大量数据,那么您将获得GC峰值。真的没办法解决它。没有大量尖峰的唯一方法是将数据分块 - 将其分成更小的部分(可能是每个设备),然后在加载更多数据之前对其进行处理。
答案 1 :(得分:0)
不是一次请求服务中的所有数据,而是以块的形式请求数据。这样可以防止内存填满并强制使用小型GC。