【问题标题】:DDMS Heap - 1-byte array(byte[], boolean[])DDMS 堆 - 1 字节数组(byte[], boolean[])
【发布时间】:2012-11-27 11:14:42
【问题描述】:

我在我的 android 应用程序中遇到了一些内存泄漏。我已经使用MAT 来分析内存使用情况。但是我从 Eclipse 的 DDMS 角度提出了一个问题,1-byte array[byte[], boolean[]) 是什么意思?

这是针对我的应用程序的吗?你可以看到这是大内存泄漏问题,这个总是在增加,其余的会随机增加和减少。我的猜测是 GC 没有捕捉到这种类型。任何人都可以解释为什么会发生这种情况,只有这么少的信息?

【问题讨论】:

  • 您可以查看该 1 字节数组的所有 614 个实例并回溯以查看哪些对象拥有它们。您可能想从查看最大的实例开始(我看到最大的实例超过 3MB)
  • @Tobias 你解决了问题??
  • @SubhalaxmiNayak 是的,几年前我就解决了。基本上,我不是在寻求具体的解决方案,而是对 1 字节的解释。请查看已接受的答案。
  • 是的,我已经检查了那个。并且仍然获得平均 7700 KB .. :(
  • @TobiasMoeThorstensen 你能看看我的问题stackoverflow.com/questions/29145401/…

标签: android ddms


【解决方案1】:

单字节数组是对组织为单字节数组的任何数据结构的名称。在你的情况和那个尺寸下,我会赌位图或 Drawble。

内存泄漏的最常见原因是静态对象未正确管理并持有对以下内容的引用:

  • 上下文
  • 视图(包含对上下文的引用(也可能对位图)
  • 线程(GC 不容易收集)
  • 处理程序(保存对上下文的引用)

大多数问题都可以通过确保在不再需要时将对象设置为 null 来解决。

问候。

【讨论】:

    【解决方案2】:

    byteboolean 各占 1 个字节。如果你有一个数组,你就有一个“1字节数组”。

    例如,ByteBuffer 应该在内部持有其中一个。

    您总共有 614 个,其中最小的是 byte[24](或 boolean[24]),最大的是 3MB。它们一起使用 104MB。

    如果它们不再被引用,GC 将删除它们。

    例如当你放

    private static byte myArray[] = new byte[3 * 1024 * 1024];
    

    在你的一个类中并且永远不要将它设置回 null (myArray = null) 那么这个类不能被垃圾收集,因为另一个 Object 有对它的引用。该对象将是类本身(如String.class)。类对象不能被垃圾回收,因为类永远不会被卸载。 (它们被 ClassLoader 引用,而 ClassLoader 本身可以被另一个 ClassLoader 引用/加载,没有它们你不能创建对象和使用类 - 他们需要留下来,他们需要保留对他们的类的引用)

    通常没那么简单,但通常以 static 开头。

    在 MAT 中(在您强制 GC 之后)查看不再打算保持活动状态的对象的引用链,并确定持有该引用的一个 Object。在您的代码中将其设置为null,您的泄漏就消失了。这里有更详细的解释:

    http://android-developers.blogspot.de/2011/03/memory-analysis-for-android.html

    【讨论】:

    【解决方案3】:

    我今晚遇到了这个问题,几乎检查了每一段代码,但我找不到任何东西。

    我所做的是从 intelij 启动应用程序,然后按主页按钮并再次打开应用程序。每次应用程序堆增加一倍。

    最后我发现,当我从 ADB 启动应用程序并按下主页按钮并再次打开应用程序时,它并没有带回旧的活动,它只是开始一个新的活动。当我按下完成时,它开始循环遍历所有这些。就像他们被视为两种不同的意图一样。所以我将android:launchMode="singleTop" 放在清单中的主要活动上,它解决了问题。

    虽然这不是此问题的主要原因,但如果您遇到此问题,请先检查一下。浪费了我三四个小时。

    【讨论】:

    • 我会为可能遇到此问题的其他人投赞成票。就我而言,这是由于 GC 没有回收的非常大的位图。感谢您的贡献。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 2022-01-13
    • 2011-05-13
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2023-03-20
    相关资源
    最近更新 更多