我有一个非常简单的Android应用程序,只有一个活动,只有一个TextView,上面写着“Hello World”。该应用程序没有做任何其他事情。它是您在Android Studio中创建新应用时获得的默认应用。基本上该应用程序没有做任何事情。
正如预期的那样,当您尝试对此应用程序进行内存分析时,Android设备监视器在hdpi / mdpi设备(如MotoE,MotoG等)上显示非常小的内存使用量(堆大小~10 MB,堆分配~3 MB)
然而,在xhdpi / xxhdpi设备(Nexus 5,小米Mi3,Mi4i,三星Galaxy Note 2等)上,应用程序堆大小突然增加到31 MB并分配到23 MB。
以下是来自小米Mi3的Android设备监视器的屏幕截图:
我进行了堆转储并在内存分析器工具(MAT)中打开它。 2个主要泄密嫌疑人是“android.content.res.Resources”和“android.graphics.NinePatch”类,仅为其中2个分配了20.3 MB。
The class "android.content.res.Resources", loaded by "<system class
loader>", occupies 87,24,208 (36.45%) bytes. The memory is accumulated
in one instance of "android.util.LongSparseArray[]" loaded by "<system
class loader>".
217 instances of "android.graphics.NinePatch", loaded by "<system
class loader>" occupy 1,26,11,616 (52.70%) bytes. These instances are
referenced from one instance of "java.lang.Object[]", loaded by "
<system class loader>"
还有一个暗示说这两个嫌疑人可能是相关的,因为他们的参考链有一个共同的开头。
为什么这么简单的应用程序会为这两个类分配如此大量的堆内存,这基本上什么都不做?