关闭

Android 4K高清图片解码显示(1)安卓内存分析

376人阅读 评论(0) 收藏 举报
分类:

    Android在5.0之前使用Dalvik虚拟机。Dalvik 基于寄存器,而 JVM 基于栈。

    Dalvik的内存分为3部分:

          1.Java Object Heap:这部分是用来分配java对象的,app中java代码new出来的对象都在这个heap当中分配。  Android系统对dalvik的heap  size作了硬性限制,不同的手机可能根据自身内存大小为Java Object Heap配置了不同的大小。当java进程申请的java空间超过阈值时,就会抛出OOM异常。 在代码中可以使用ActivityManager.getMemoryClass方法获取该值。Java  Object Heap的最大值就是app能够使用的最大内存。下面是我的Nexus5的配置:

[dalvik.vm.heapsize]: [512m]
[dalvik.vm.heapstartsize]: [8m]

            2. Bitmap Memory: 也称为External Memroy ,是用来处理图像的。 在Android3.1之前,BitmapMemory是在Native Heap中进行分配, 但是这部分内存同样计入到了Java ObjectHeap中 。在3.1之后的版本中, BitmapMemory直接在Java Object Heap中进行分配,可以接收GC管理了。Bitmap是吃内存大户,要谨慎合理的使用。

            3. Native Memory: Native Code中使用malloc分配出来的内存,就是分配在Native Heap.   这部分内存不受Java Object Heap限制,可以自由使用。虽然这么说,但是不能过于贪心,如果过多的使用这部分内存,则可能引起GC被回收,造成app莫名的奔溃。

           在调试时可以使用一下命令查看app内存使用情况。

           adb shell dumpsys meminfo $package/$pid

           下面是dump相册的内存使用的结果。


shell@hammerhead:/ $ dumpsys meminfo com.google.android.apps.photos
dumpsys meminfo com.google.android.apps.photos
Applications Memory Usage (kB):
Uptime: 447210103 Realtime: 1130534558


** MEMINFO in pid 6511 [com.google.android.apps.photos] **
                   Pss  Private  Private  Swapped     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap     6253     5912        0        0    23808    21797     2010
  Dalvik Heap    10778    10676        0        0    31885    25032     6853
 Dalvik Other      988      988        0        0
        Stack      264      264        0        0
       Ashmem        4        4        0        0
      Gfx dev     6036     6036        0        0
    Other dev        4        0        4        0
     .so mmap      691      140        0        0
    .apk mmap     1163        0      768        0
    .ttf mmap       76        0       72        0
    .dex mmap    10432        4    10428        0
    .oat mmap     1440        0      476        0
    .art mmap      965      676       40        0
   Other mmap      470        8      368        0
   EGL mtrack    41280    41280        0        0
      Unknown      136      136        0        0
        TOTAL    80980    66124    12156        0    55693    46829     8863


 App Summary
                       Pss(KB)
                        ------
           Java Heap:    11392
         Native Heap:     5912
                Code:    11888
               Stack:      264
            Graphics:    47316
       Private Other:     1508
              System:     2700


               TOTAL:    80980      TOTAL SWAP (KB):        0


 Objects
               Views:      112         ViewRootImpl:        1
         AppContexts:        2           Activities:        1
              Assets:        2        AssetManagers:        2
       Local Binders:       31        Proxy Binders:       22
       Parcel memory:        9         Parcel count:       38
    Death Recipients:        1      OpenSSL Sockets:        0


 SQL
         MEMORY_USED:      552
  PAGECACHE_OVERFLOW:      316          MALLOC_SIZE:       62


 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4      272             52         5/22/4  /data/user/0/com.google.android.apps.photos/databases/disk_cache
         4      272             27         3/16/4  /data/user/0/com.google.android.apps.photos/databases/disk_cache (1)
         4       28             45         6/19/5  /data/user/0/com.google.android.apps.photos/databases/google_analytics_v4.db


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1799次
    • 积分:56
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档