小工具知识网

当前位置: 首页 > 行业知识 > 安卓内存信息查看

行业知识

安卓内存信息查看

2026-10-21 22:47:09 来源:互联网转载

目录

  • 前言
  • 一、Android查看内存相关信息的方法
    • 1.1 通过 adb shell 获取内存信息
    • 1.2 通过编程方式获取内存信息
    • 1.3 adb shell 获取应用程序内存使用情况
    • 二、���结

      前言

      一、Android查看内存相关信息的方法

      1.1 通过 adb shell 获取内存信息

      C:\Users\henry.xue>adb shelltrinket:/ # cat proc/meminfoMemTotal:        3711580 kBMemFree:          607128 kBMemAvailable:    2371444 kBBuffers:           10980 kBCached:          1697644 kBSwapCached:            0 kBActive:          1107552 kBInactive:        1345780 kBActive(anon):     745760 kBInactive(anon):     4916 kBActive(file):     361792 kBInactive(file):  1340864 kBUnevictable:           0 kBMlocked:               0 kBSwapTotal:       2097148 kBSwapFree:        2097148 kBDirty:              2320 kBWriteback:             0 kBAnonPages:        744756 kBMapped:           666316 kBShmem:              5960 kBSlab:             231564 kBSReclaimable:      70964 kBSUnreclaim:       160600 kBKernelStack:       35616 kBPageTables:        52180 kBNFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:     3952936 kBCommitted_AS:   90872212 kBVmallocTotal:   263061440 kBVmallocUsed:       75784 kBVmallocChunk:          0 kBCmaTotal:         208896 kBCmaFree:               0 kB

      参数详解:

      ()
      • MemTotal:总内存大小,单位为 kB。
      • MemFree:空闲内存大小,单位为 kB。表示当前未被使用的内存大小。
      • MemAvailable:可用内存大小,单位为 kB。表示系统当前可用于分配给进程的内存大小,包括空闲内存和缓存内存。
      • Buffers:缓冲区大小,单位为 kB。用于存放文件系统的缓冲区大小。
      • Cached:缓存大小,单位为 kB。用于存放文件系统的缓存大小。
      • SwapCached:交换缓存大小,单位为 kB。表示被交换到磁盘的内存页在内存中的缓存大小。
      • Active:活跃内存大小,单位为 kB。表示当前正在使用的内存大小。
      • Inactive:非活跃内存大小,单位为 kB。表示当前未被使用但仍然在内存中的内存大小。
      • Active(anon):活跃的匿名内存大小,单位为 kB。表示当前正在使用的匿名内存大小。
      • Inactive(anon):非活跃的匿名内存大小,单位为 kB。表示未被使用的匿名内存大小。
      • Active(file):活跃的文件内存大小,单位为 kB。表示当前正在使用的文件内存大小。
      • Inactive(file):非活跃的文件内存大小,单位为 kB。表示未被使用的文件内存大小。
      • 其余参数包括 Dirty、Writeback、AnonPages、Mapped、Shmem、Slab、KernelStack、PageTables 等,分别表示不同类型的内存使用情况和内核数据结构占用的内存大小。
      • SwapTotal:交换空间总大小,单位为 kB。表示系统中交换空间的总大小。
      • SwapFree:可用交换空间大小,单位为 kB。表示系统中可用于交换的空间大小。
      • CommitLimit:提交限制大小,单位为 kB。表示系统能够保证不会耗尽内存和交换空间的总可用空间大小。
      • Committed_AS:已提交内存大小,单位为 kB。表示系统当前已分配但尚未使用的内存大小。
      • VmallocTotal:虚拟内存总大小,单位为 kB。表示系统中虚拟内存的总大小。
      • VmallocUsed:已使用的虚拟内存大小,单位为 kB。表示系统中已被使用的虚拟内存大小。
      • VmallocChunk:虚拟内存块大小,单位为 kB。表示系统中虚拟内存的块大小。
      • CmaTotal:连续内存分配总大小,单位为 kB。表示系统中用于连续内存分配的总大小。
      • CmaFree:可用连续内存分配大小,单位为 kB。表示系统中可用于连续内存分配的大小。

        1.2 通过编程方式获取内存信息

        ActivityManager里的内部类MemoryInfo

            public static class MemoryInfo implements Parcelable {        /**         * The available memory on the system.  This number should not         * be considered absolute: due to the nature of the kernel, a significant         * portion of this memory is actually in use and needed for the overall         * system to run well.         */        public long availMem;        /**         * The total memory accessible by the kernel.  This is basically the         * RAM size of the device, not including below-kernel fixed allocations         * like DMA buffers, RAM for the baseband CPU, etc.         */        public long totalMem;        /**         * The threshold of {@link #availMem} at which we consider memory to be         * low and start killing background services and other non-extraneous         * processes.         */        public long threshold;        /**         * Set to true if the system considers itself to currently be in a low         * memory situation.         */        public boolean lowMemory;        ......

        其中重要的四个参数:

        ()
        • availMem: 系统上的可用内存。这个数字不应该被认为是绝对的:由于内核的性质,这个内存的很大一部分实际上正在使用,并且是整个系统正常运行所必需的。
        • totalMem: 内核可访问的总内存。这基本上是设备的 RAM 大小,不包括内核下面的固定分配,如 DMA 缓冲区、基带 CPU 的 RAM 等。
        • threshold: availMem 的阈值,在这个阈值以下,系统会认为内存较低,并开始终止后台服务和其他非必要进程。
        • lowMemory: 如果系统认为当前处于低内存情况,则设置为 true。
          ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();activityManager.getMemoryInfo(memoryInfo);long totalMemory = memoryInfo.totalMem;long availableMemory = memoryInfo.availMem;

          这段代码将获取设备的总内存和可用内存信息。

          1.3 adb shell 获取应用程序内存使用情况

          • 使用以下命令可以查看应用程序的内存使用情况:

            adb shell dumpsys meminfo

            • 将 替换为您要查看的应用程序包名,这将返回该应用程序的内存使用情况,包括堆内存、Native 内存等。

              示例:

              trinket:/ # dumpsys meminfo com.android.systemuiApplications Memory Usage (in Kilobytes):Uptime: 85930415 Realtime: 85930415** MEMINFO in pid 2027 [com.android.systemui] **                   Pss  Private  Private     Swap     Heap     Heap     Heap                 Total    Dirty    Clean    Dirty     Size    Alloc     Free                ------   ------   ------   ------   ------   ------   ------  Native Heap    27358    27308        0        0    33420    29399     4020  Dalvik Heap     6052     6008        0        0    11031     5516     5515 Dalvik Other     2273     2268        0        0        Stack       40       40        0        0       Ashmem       96       92        0        0      Gfx dev     4332     4332        0        0    Other dev       44        0       40        0     .so mmap     2982       88       76        0    .jar mmap     2108        0      192        0    .apk mmap    14337        0    11888        0    .ttf mmap      196        0       52        0    .dex mmap      173        4      168        0    .oat mmap      952        0        0        0    .art mmap     1583     1280        0        0   Other mmap     1645      476      108        0   EGL mtrack     3024     3024        0        0    GL mtrack     2964     2964        0        0      Unknown     1548     1544        0        0        TOTAL    71707    49428    12524        0    44451    34915     9535 App Summary                       Pss(KB)                        ------           Java Heap:     7288         Native Heap:    27308                Code:    12468               Stack:       40            Graphics:    10320       Private Other:     4528              System:     9755               TOTAL:    71707      TOTAL SWAP (KB):        0 Objects               Views:      840         ViewRootImpl:        6         AppContexts:       16           Activities:        0              Assets:       14        AssetManagers:        0       Local Binders:      171        Proxy Binders:       67       Parcel memory:       22         Parcel count:       75    Death Recipients:        4      OpenSSL Sockets:        0            WebViews:        0 SQL         MEMORY_USED:        0  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0trinket:/ #
              • Pss:Proportional Set Size,进程使用的物理内存大小,按比例分配共享库的内存。
              • Private Dirty:进程使用的私有脏数据内存大小,表示进程独占的脏数据内存。
              • Private Clean:进程使用的私有干净数据内存大小,表示进程独占的干净数据内存。
              • Swap:被交换到磁盘的内存大小。
              • Heap Size:堆内存总大小。
              • Heap Alloc:已分配的堆内存大小。
              • Heap Free:堆内存空闲大小。

                在输出中,各个部分的含义如下:

                • Native Heap:本地堆内存使用情况。
                • Dalvik Heap:Dalvik 虚拟机堆内存使用情况。
                • Dalvik Other:Dalvik 虚拟机其他内存使用情况。
                • Stack:栈内存使用情况。
                • Ashmem:共享内存使用情况。
                • Gfx dev:图形设备内存使用情况。
                • Other dev:其他设备内存使用情况。
                • .so mmap:共享库内存映射使用情况。
                • .jar mmap:Java 存档内存映射使用情况。
                • .apk mmap:Android 应用程序包内存映射使用情况。
                • .ttf mmap:TrueType 字体内存映射使用情况。
                • .dex mmap:Dalvik 可执行文件内存映射使用情况。
                • .oat mmap:ART 可执行文件内存映射使用情况。
                • .art mmap:ART 内存映射使用情况。
                • Other mmap:其他内存映射使用情况。
                • EGL mtrack:EGL 内存使用情况。
                • GL mtrack:图形库内存使用情况。
                • Unknown:未知内存使用情况。

                  App Summary

                  • Java Heap:Java 堆内存的使用情况,占用了 7288KB 的内存。
                  • Native Heap:本地堆内存的使用情况,占用了 27308KB 的内存。
                  • Code:代码段的内存使用情况,占用了 12468KB 的内存。
                  • Stack:堆栈的内存使用情况,占用了 40KB 的内存。
                  • Graphics:图形相关的内存使用情况,占用了 10320KB 的内存。
                  • Private Other:其他私有内存的使用情况,占用了 4528KB 的内存。
                  • System:系统内存的使用情况,占用了 9755KB 的内存。

                    在总结部分:

                  • TOTAL:所有上述部分的内存使用情况总和为 71707KB。
                  • TOTAL SWAP:交换空间(Swap)的使用情况为 0KB,表示当前没有使用交换空间。

                    Objects

                    Objects:这部分提供了应用程序中对象的相关统计信息。

                    • Views:视图对象的数量。
                    • ViewRootImpl:视图根对象的数量。
                    • AppContexts:应用程序上下文的数量。
                    • Activities:活动(Activity)对象的数量。
                    • Assets:资源对象的数量。
                    • AssetManagers:资源管理器对象的数量。
                    • Local Binders:本地 Binder 对象的数量。
                    • Proxy Binders:代理 Binder 对象的数量。
                    • Parcel memory:Parcel 内存使用情况。
                    • Parcel count:Parcel 对象的数量。
                    • Death Recipients:***亡接收者对象的数量。
                    • OpenSSL Sockets:OpenSSL 套接字对象的数量。
                    • WebViews:Web 视图对象的数量。

                      SQL

                      • SQL:这部分提供了与 SQL 数据库相关的内存使用情况。
                      • MEMORY_USED:数据库内存使用情况。
                      • PAGECACHE_OVERFLOW:页面缓存溢出情况。
                      • MALLOC_SIZE:分配大小。

                        二、总结

                        • adb shell cat proc/meminfo
                        • ActivityManager.MemoryInfo
                        • adb shell dumpsys meminfo

上一篇:Win10语言栏重置教程,一键恢复默认设置!

下一篇:易语言找图找色操作指南,轻松上手,掌握技巧!