DDMS堆 – 1字节数组(byte ,boolean )

我在我的android应用程序中遇到一些内存泄漏。 我已经使用MAT来分析内存使用情况。 但是我有一个来自Eclipse中的DDMS视图的问题,1字节数组[byte [],boolean [])是什么意思?

在这里输入图像说明

这是特定于我的应用程序? 你可以看到这是大的内存泄漏问题,这个问题总是会增加,其余的会随机增加和减less。 我的猜测是GC不能捕捉这种types。 有人可以解释为什么会发生这种情况吗?

  • 从DDMS中删除文件夹
  • 发送jdwp跟踪请求失败!
  • DDMS文件浏览器无法访问数据\数据(HTC Desire HD)
  • 在eclipse的DDMS视angular中无法select我的Android客户端
  • Eclipse挂起后在DDMS后创build初始化
  • Android,跟踪DDMS的记忆,“Get Allocations”没有做任何事情
  • 发布Android相机无需重新启动?
  • 在LogCat中过滤标签(在Android Eclipse插件中)
  • 一个byte和一个boolean都是1个字节。 如果你有一个“1字节数组”的数组。

    例如一个ByteBuffer应该在内部保存其中的一个。

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

    如果GC不再被引用,GC将被清除。

    例如,当你把

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

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

    这通常不是那么简单,但通常从static地方开始。

    在MAT中(在强制GC之后),请查看不再用于保持活动状态的对象的引用链,并标识保存该引用的一个对象。 在你的代码中设置一个null ,你的泄漏消失了。 在这里更详细地解释:

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

    一个字节的数组就是任何数据结构被指定为一个单字节数组。 在你的情况下,这样的大小,我会赌在一个位图或一个Drawable。

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

    • 上下文
    • 视图(持有参考上下文(也可能是位图)
    • 线程(不容易被GC收集)
    • 处理程序(持有参考上下文)

    他们中的大多数都可以解决,确保您不需要长时间将对象设置为null。

    问候。

    今天晚上我跑到这个问题,差不多我检查了所有的代码,但我找不到任何东西。

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

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

    虽然这不是这个问题的主要原因,但是如果你遇到这个问题,在任何事情之前都要检查一下。 浪费了三四个小时。