什么是Android内存转储中的EGL和GL mtrack

时间:2015-05-19 22:13:38

标签: android performance xamarin

我目前正在开发一种混合应用程序,它正在展示我尝试调试的一些特殊内存使用情况。一旦应用程序启动,它似乎立即使用接近250MB的内存,这似乎过分给定我们在该点加载的所有内容都是登录屏幕。我一直在寻找一些适用于Android的内存分析工具(Xamarin分析器和SDK附带的android分析器),但是它们都显示出相对较低的堆使用率(~10-15MB,我就是这样)试图下来)。我跑了" adb shell dumpsys meminfo APPNAME -d'得到以下痕迹:

** MEMINFO in pid 24925 [APPNAME] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    19439    19396        0        0    28672    22915     5756
  Dalvik Heap    15441    14992        0        0    37319    36837      482
 Dalvik Other      542      368        0        0                           
        Stack      432      432        0        0                           
       Ashmem    17388    16508      880        0                           
      Gfx dev    40538    34504        0        0                           
    Other dev        4        0        4        0                           
     .so mmap     6211      224     3080        0                           
    .apk mmap    10531        0    10232        0                           
    .ttf mmap      453        0      260        0                           
    .dex mmap     1263        0      980        0                           
    .oat mmap      635        0      152        0                           
    .art mmap      707      516       24        0                           
   Other mmap      452        4       52        0                           
   EGL mtrack    63508    63508        0        0                           
    GL mtrack    79116    79116        0        0                           
      Unknown    21756    21756        0        0                           
        TOTAL   278416   251324    15664        0    65991    59752     6238

我一直试图通过使用https://developer.android.com/tools/debugging/debugging-memory.html提供的文档来理解这意味着什么,但该页面似乎没有关于最大罪魁祸首的任何信息:Gfx dev,EGL mtrack,GL mtrack和Unknown。是否有一些文件说明这些类别是什么或为什么它们会变得如此之大?

由于

2 个答案:

答案 0 :(得分:9)

EGL和GL基本上显示了Graphics层消耗的内存。我确信你在Android棒棒糖设备上运行adb shell dumpsys meminfo命令。实际上dumpsys meminfo工具/命令已在棒棒糖中修改以计算和显示图形内存。

在旧版本(KitKat或更早版本)中,虽然图形消耗了KitKat或旧版本的内存,但您无法找到EGL和GL信息。

这是我们可以请求Google更新其文档以解释新的内存组件。简而言之,你可以说它是Android文档中的错误。他们应该根据adb shell dumpsys meminfo工具/命令的最新实现更新它。

参考文献:

EGL - http://en.wikipedia.org/wiki/EGL_(API)

GL - http://en.wikipedia.org/wiki/OpenGL

答案 1 :(得分:5)

GL mtrack是驱动程序报告的GL内存使用情况。它主要是GL纹理大小,GL命令缓冲区,固定全局驱动程序RAM开销等的总和。

EGL mtrack是gralloc内存使用情况。它主要是SurfaceView / TextureView的总和。