移动App性能测评与优化1.5.1 从class对象说起

    xiaoxiao2024-03-31  139

    1.5.1 从class对象说起

    在MAT的对象实例列表中,我们往往能有很多class条目,如图1-19所示。

     

    图1-19 MAT中似乎不消耗内存的class条目

    这些对象是各种类型的元数据。从MAT的信息看来,它们只是保存了各个类的静态成员,所以对于没有静态成员的类型,Shallow Heap的值为0,并不消耗内存。但实际上,这只是class消耗内存的冰山一角。我们从下面的例子开始:

     

    这段代码是一个数学处理库提供的函数,代码十分简单,只是新建了两个对象,但将这段代码在一个空应用中执行后,我们能够观察到以下的内存增长:

    Dalvik Heap增长约1.8MB。

    Dalvik Other增长约60KB。

    .dex mmap增长约300KB。

    Dalvik Heap的增长是我们能预期的。通常来说,能够从代码的逻辑中分析出执行这段代码总共需要分配多少内存,也能够在MAT中看到新建对象消耗的内存。当应用使用完新建的对象后,就会将heap内存释放,但Dalvik Other和.dex mmap部分是不会释放的。接下来我们首先分析一下这两部分为什么消耗了这么多内存。

    最新回复(0)