【问题标题】:android - RAM consumption increases while overwriting large objectsandroid - 覆盖大对象时RAM消耗增加
【发布时间】:2013-03-04 20:58:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: android performance android-memory


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      相关资源
      最近更新 更多