0

致反对者:我没有粘贴任何代码,因为我的问题很笼统,一旦有人提出要求,我就会发布一些代码。

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

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

4

1 回答 1

1

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

于 2013-03-04T21:09:45.317 回答