android - 覆盖大型对象时RAM消耗增加

时间:2013-03-04 20:58:10

标签: android performance android-memory

对于downvoters:我没有粘贴任何代码,因为我的问题是一般化的,我会在有人请求时发布一些代码。

在我的应用程序中,我在Activity的开始处以相当大的JSONArray形式加载用户的播放列表,解析并在ListView中显示此数据。如果用户按下“更新”按钮,则重复整个操作,相同的对象将被覆盖。我注意到,每次更新时,应用程序使用的RAM量随机增加0.4到1 MB。我试图找出原因,相同的内存地址只是被新数据覆盖,为什么RAM消耗增长?我还尝试在更新之前将所有使用过的objets设置为null,这减少了使用的RAM量,但只减少了大约100KB。

我没有解释这个问题,因为有相同的变量会被覆盖。 服务器响应的大小没有改变。任何想法如何修复此内存泄漏?

1 个答案:

答案 0 :(得分:1)

因为相同的内存地址不会被覆盖。您正在创建占用新内存的新对象,并且两个副本将一直存在,直到旧的对象被垃圾收集。您可以通过确保在应用程序中的任何位置(通过明确地将它们设置为null)没有悬挂引用旧数据,或者通过调用System.gc(尽管它对它有很大的负面惩罚)来加快速度。但预计会在这种情况下成长。不应该发生的是,如果你在多次获得结果后进行hprof,你应该永远不会看到数组的实例总数增加无限。如果你这样做,那么你需要跟踪所有者链并看看谁还在挂着。